matrix_mult_master.c

来自「A Parallel program to multiply two matri」· C语言 代码 · 共 70 行

C
70
字号
#include<stdio.h>#include<pvm3.h>#include<malloc.h>#define NPROC 4main(){	int mtid,wtid[NPROC],mtype,nrowa,ncola,ncolb,rows,averow,extra,offset,retcode,i,j,ind,nelements;	int *a,*b,*c;	char localhost[35];	int index[NPROC];	printf("Enter the no of rows and columns of matrix A");	scanf("%d \t %d",&nrowa,&ncola);	printf("\nEnter the no of columns of matrix A");	scanf("%d",&ncolb);	a = (int*)malloc(nrowa*ncola*sizeof(int));	b = (int*)malloc(ncola*ncolb*sizeof(int));	c = (int*)malloc(nrowa*ncolb*sizeof(int));	mtid = pvm_mytid();for(i = 0; i < NPROC;i++){	if(i == 0){		printf("Enter the localhost name -- must match with PVM conf" );		scanf("%s",localhost);		retcode = pvm_spawn("matrix_mult_slave",NULL,PvmTaskHost,localhost,1,&wtid[0]);	}else 		retcode = pvm_spawn("matrix_mult_slave",NULL,PvmTaskDefault,"",1,&wtid[i]);		}	averow = nrowa/NPROC;	extra = nrowa % NPROC;	offset = 0;	mtype = 1;	ind =0;	index[0]=0;for(i = 0; i <NPROC; i++){	rows = (i < extra)? averow+1:averow ;	retcode = pvm_initsend(PvmDataDefault);	retcode = pvm_pkint(&rows,1,1);	retcode = pvm_pkint(&ncola,1,1);	retcode = pvm_pkint(&ncolb,1,1);	retcode = pvm_pkint(&a[offset],rows*ncola,1);	retcode = pvm_pkint(&b[0],ncola*ncolb,1);	retcode = pvm_send(wtid[i],mtype);	offset = offset+ rows*ncola;        if(i!=0)	{		ind += rows*ncolb;		index[i]=ind;	}}	mtype = 2;	for(i = 0 ; i<NPROC;i++){	retcode = pvm_recv(-1,mtype);	retcode = pvm_upkint(&nelements,1,1);	retcode = pvm_upkint(&c[index[i]],nelements,1);}	printf("The product matrix is \n");	for(i = 0; i<nrowa;i++)	for(j = 0; j <ncolb;j++)	printf("%d  ",c[i*ncolb+j]);	printf("\n");pvm_exit();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?