我的第一个MPI程序,请教一些问题

我写的第一个MPI程序,并行转置矩阵
编译是通过了,但是时间貌似和线程数没什么关系
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <string.h>
#include <time.h>
#include <math.h>
int size=10000,length;
volatile int** matrix;
void matrix_init(){
matrix=(volatile int**)malloc(sizeof(volatile int*)*size);
for(int i=0;i<size;i++)
matrix[i]=(volatile int*)malloc(sizeof(volatile int)*size);
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
matrix[i][j]=rand()%100;
}
void matrix_print(){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
void matrix_transpose(int startline,int endline){
for(int j=startline;j<endline;j++){
for(int i=0;i<j;i++){
int temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
}

int main(int argc,char** argv){
int t;//线程数
int myid;//id
int times=1;//测试次数
double worktime=0;
double mytime=0;
srand((unsigned)time(NULL));
matrix_init();
// printf("原始矩阵:\n");
// matrix_print();
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&t);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
double start=MPI_Wtime();
for(int k=0;k<times;k++){
int startline=sqrt(myid*size*size/t*1.0);
int endline=sqrt((myid+1)*size*size/t*1.0)-1;
matrix_transpose(startline,endline);
}
double end=MPI_Wtime();
mytime=end-start;
MPI_Reduce(&mytime,&worktime,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
if(myid==0)
printf("number of threads is %d and time is %ld s\n------------------------------------------\n",t,worktime/times);
MPI_Finalize();
return 0;
}
为什么MPI_Init()和MPI_Finalize()之外的代码也会被多次执行..比如我想输出一下原始矩阵,结果每个线程都输出了一遍。。能讲一下程序执行的大概过程吗

你一个师姐做这方面的好像原程序不是并行代码,只是加了MPI的库函数 MPI往往加在出现循环的地方。你先大体学习下MPI语句,然后把程序中添加MPI的地方改写,就是串行程序了。这个工作不会太难,不需要你太多了解...
温馨提示:答案为网友推荐,仅供参考
相似回答