資源簡介
并行計算大作業,MPI矩陣轉置,效果很好

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#define?MAX?5001
using?namespace?std;
int?pnummlnfirst[MAX][MAX]*tmp;
double?t_start?t_end;
int?ans[MAX][MAX];
MPI_Status?status;
int?main(int?argc?char*?argv[]){
????int?my_rankgroup_size;
????int?i?jp1p2xyt;
????n?=?atoi(argv[1]);
????MPI_Init(&argc&argv);
????MPI_Comm_size(MPI_COMM_WORLD&group_size);
????MPI_Comm_rank(MPI_COMM_WORLD&my_rank);
????pnum?=?group_size;
????m?=?sqrt(pnum);
????l?=?n/m;
????tmp?=?(int?*)malloc(sizeof(int)*l*l);
????if(my_rank?==?0){
????????FILE?*fp?=?fopen(“Parallel_compumatrix.txt““r“);
????????if(!fp){
????????????printf(“error“);
????????????exit(1);
????????}
????????else
????????{
????????????for(i?=?0;?i?????????????????for(j?=?0;?j?????????????????????fscanf(fp“%d?“&(first[i][j]));
????????????????????//printf(“%2d?“first[i][j]);
????????????????}
????????????????//printf(“\n“);
????????????}
????????????fclose(fp);
????????}
????????t_start?=?MPI_Wtime();
????????for(i?=?0;?i?????????????for(j?=?0;?j?????????????????p1?=?j*l?p2?=?i*l;
????????????????//printf(“%d?is?sending.\n“i*m+j);
????????????????for(x?=?0;?x?????????????????????for(y?=?0;y?????????????????????????tmp[x*l+y]?=?first[p1][p2];
????????????????????????p2++;
????????????????????????//printf(“%2d?“tmp[x*l+y]);
????????????????????}
????????????????????//printf(“\n“);
????????????????????p1++;
????????????????????p2?=?i*l;
????????????????}
????????????????if(i!=0?||?j!=0)
????????????????????MPI_Send(tmpl*lMPI_INTi*m+ji*m+jMPI_COMM_WORLD);
????????????}
????????}
????}
????//所有進程給主進程發自己轉置部分的數組
????else{????//printf(“l?=?%d“l);
????????MPI_Recv(tmpl*lMPI_INT0my_rankMPI_COMM_WORLD&status);
????????int?t;
????????for(i?=?0;?i?????????????for(j?=?i+1;?j?????????????????t?=?tmp[i*l+j];
????????????????tmp[i*l+j]?=?tmp[j*l+i];
????????????????tmp[j*l+i]?=?t;
????????????}
????????}
????????MPI_Send(tmpl*lMPI_INT0my_rankMPI_COMM_WORLD);
????}
????if(my_rank==0){
????????for(i?=?0;?i?????????????for(j?=?0;?j?????????????????ans[i][j]?=?first[j][i];
????????????}
????????}
????????for(i?=?0;?i?????????????for(j?=?0;?j?????????????????if(i!=0?||?j!=0){
????????????????????MPI_Recv(tmpl*lMPI_INTi*m+ji*m+jMPI_COMM_WORLD&status);
????????????????????for(x?=?0;?x?????????????????????????for(y?=?0;?y?????????????????????????????ans[i*l+x][j*l+y]?=?tmp[x*l+y];
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????}
????t_end?=?MPI_Wtime();
????if?(my_rank==0)
????{
????????printf(“Matrix?order:%d?Time?cost:%lf\n“nt_end-t_start);
????}
????free(tmp);
????MPI_Barrier(MPI_COMM_WORLD);
????MPI_Finalize(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-04-18?23:57??實驗三\
?????文件???????17324??2017-04-07?16:51??實驗三\hw3
?????文件????????3025??2017-04-18?23:57??實驗三\hw3.cpp
?????文件????????1130??2017-04-07?08:44??實驗三\hw3.o46502
?????文件????????1130??2017-04-07?08:45??實驗三\hw3.o46506
?????文件????????1130??2017-04-07?08:45??實驗三\hw3.o46508
?????文件????????1130??2017-04-07?09:36??實驗三\hw3.o46535
?????文件????????1835??2017-04-07?16:51??實驗三\t3.pbs
?????文件??????612165??2017-04-20?20:54??實驗報告三.pdf
評論
共有 條評論