MPI矩阵乘法
去年学习了并行计算,接触了MPI、Pthreads和OpenMP等常用的并行方法实现了并行的矩阵乘法,本章在此总结一下MPI的矩阵乘法使用。
使用简单的MPI_Send和MPI_Recv实现使用较高级的MPI_Scatter和MPI_Gather实现
MPI_Send和MPI_Recv实现
#include
#include
#include
#include
int main(int argc,char *argv[])
{
double start, stop;
int i, j, k, l;
int *a, *b, *c, *buffer, *ans;
int size = 1000;
int rank, numprocs, line;
MPI_Init(NULL,NULL);//MPI Initialize
MPI_Comm_rank(MPI_COMM_WORLD,&rank);//获得当前进程号
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//获得进程个数
line = size/numprocs;//将数据分为(进程数)个块,主进程也要处理数据
a = (int*)malloc(sizeof(int)*size*size);
b = (int*)malloc(sizeof(int)*size*size);
c = (int*)malloc(sizeof(int)*size*size);
//缓存大小大于等于要处理的数据大小,大于时只需关注实际数据那部分
buffer = (int*)malloc(sizeof(int)*size*line);//数据分组大小
ans = (int*)malloc(sizeof(int)*size*line);//保存数据块计算的结果
//主进程对矩阵赋初值,并将矩阵N广播到各进程,将矩阵M分组广播到各进程
if (rank==0)
{
//从文件中读入矩阵
FILE *fp;
fp=fopen("a.txt","r");//打开文件
start = MPI_Wtime();
for(i=0;i |