⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix_mult_master.c

📁 A Parallel program to multiply two matrices using Parallel Virtual Machine(PVM).Also a document to i
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -