并行程序设计(MPICH环境配置)win10
生活随笔
收集整理的這篇文章主要介紹了
并行程序设计(MPICH环境配置)win10
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
下載網(wǎng)址:Downloads | MPICH
?
進去后選擇最新版下載:
點擊下載:
?
?
然后全選:
下載完成后直接安裝即可。
?
新建Win32項目:
?
點擊下一步,然后選擇“控制臺應用程序”和“空項目”:
?
?
打開項目,創(chuàng)建一個新的.cpp文件,選擇“調(diào)試”—“屬性”,打開屬性界面然后更改包含目錄和庫目錄,include文件夾和lib文件夾,都在安裝目錄下,添加自己的安裝目錄。
?
在C/C++-預處理器中的預處理定義中添加_CRT_SECURE_NO_WARNINGS(解決scanf報警的問題(針對vs2012以上版本))和 MPICH_SKIP_MPICXX
代碼生成-運行庫-選擇多線程調(diào)試(/MTd)
?
配置管理器進行修改,保證一致:
運行得到一個exe文件。
?
測試:運行exe文件,多進程計算pi值,代碼放在附錄,運行截圖:
?
?
如圖所示,當計算機節(jié)點n由3增加到7后,運行速度明顯減少。
第二份代碼,代碼也放在了附錄,顯示了多個進程:
?
附錄:
代碼一:
#include<stdio.h> #include<mpi.h> #include<stdlib.h> #include<time.h> #include<string.h>//int main(int argc, char* argv[]) //{ // int myid, numprocs, namelen; // char processor_name[MPI_MAX_PROCESSOR_NAME];// MPI_Init(&argc, &argv); // starts MPI // MPI_Comm_rank(MPI_COMM_WORLD, &myid); // get current process id // MPI_Comm_size(MPI_COMM_WORLD, &numprocs); // get number of processes // MPI_Get_processor_name(processor_name, &namelen);// if (myid == 0) printf("number of processes: %d\n...", numprocs); // printf("%s: Hello world from process %d \n", processor_name, myid);// MPI_Finalize();// return 0; //}//int main(int argc, char* argv[]) int aa(int argc, char* argv[]) {//int numprocs; /*進程數(shù),該變量為各處理器中的同名變量, 存儲是分布的*///int myid; /*我的進程ID,存儲也是分布的*///int source; /*發(fā)送消息的源進程 *///MPI_Status status; /*消息接收狀態(tài)變量,存儲也是分布的*///char message[100]; /*消息 buffer,存儲也是分布的*///int namelen; /*定義處理器名長度*///char processor_name[MPI_MAX_PROCESSOR_NAME]; /*定義進程名*///MPI_Init(&argc, &argv); /*初始化MPI*///MPI_Comm_rank(MPI_COMM_WORLD, &myid); /*各進程得到自己進程號*///MPI_Comm_size(MPI_COMM_WORLD, &numprocs); /*各進程得到進程數(shù)*///MPI_Get_processor_name(processor_name, &namelen); /*取處理器名*///if (myid != 0) {/*建立消息*///sprintf(message, "Greetings from process %d!,my name is %d", myid,namelen);/*發(fā)送長度取 strlen(message)+1, 使\0也一同發(fā)送出去*///MPI_Send(message,strlen(message) + 1, MPI_CHAR, 0, 99, MPI_COMM_WORLD);//}//else { /* my_rank == 0 *///{//MPI_Recv(message, 100, MPI_CHAR,MPI_ANY_SOURCE, 99, MPI_COMM_WORLD, &status);//printf(" % s on the % s\n", message,processor_name);//}//}/*關閉MPI,標志并行代碼段的結束*///MPI_Finalize();int rank, size, tag1 = 1, tag2 = 2;int senddata1, recvdata1, senddata2, recvdata2;int myid; /*我的進程ID,存儲也是分布的*/int namelen; /*定義處理器名長度*/char processor_name[MPI_MAX_PROCESSOR_NAME]; /*定義進程名*/MPI_Status status;MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD, &size);MPI_Comm_rank(MPI_COMM_WORLD, &myid); /*各進程得到自己進程號*/MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Get_processor_name(processor_name, &namelen); /*取處理器名*/if (rank == 1) {senddata1 = 1314;MPI_Send(&senddata1, 1, MPI_INT, 2, tag1, MPI_COMM_WORLD);printf("send %d from process %d!", senddata1, myid);}else if (rank == 2) {MPI_Recv(&recvdata1, 1, MPI_INT, 1, tag1, MPI_COMM_WORLD, &status);printf("receved %d on the %s", recvdata1, processor_name);}MPI_Finalize();return 0; } /* End main */int main(int argc, char* argv[]) {int myid, np, i, j;int tag = 666;double pi = 0.0;double fVal;//fVal代表取Xi所對應的函數(shù)值 4/(1+x^2) 即每個矩形的高度int n = 100000000;int namelen; /*定義處理器名長度*/char processor_name[MPI_MAX_PROCESSOR_NAME]; /*定義進程名*/MPI_Status status;double h = (double)1 / n; //每個矩形的寬度double local = 0.0;//每個進程計算的面積和 double start, end;double xi;MPI_Init(&argc, &argv);//啟動并行程序 MPI_Comm_size(MPI_COMM_WORLD, &np);//獲取進程總數(shù)MPI_Comm_rank(MPI_COMM_WORLD, &myid);//獲取當前進程號MPI_Get_processor_name(processor_name, &namelen); /*取處理器名*/start = MPI_Wtime();//記錄開始時間for (i = myid; i < n; i += np) //利用np個進程同時計算各部分矩形面積{xi = (i + 0.5) * h;fVal = 4.0 / (1.0 + xi * xi);//得到f(xi) local += fVal;}local = local * h;//得到該進程所計算的面積 //進程號!=0的進程計算的結果發(fā)送到進程0上面 if (myid != 0){MPI_Send(&local, 1, MPI_DOUBLE, 0, myid, MPI_COMM_WORLD);}if (myid == 0) //進程號為0就累加每個進程的計算結果 {pi = local;//得到進程0的值 后面接收就會覆蓋這個值 for (j = 1; j < np; j++){MPI_Recv(&local, 1, MPI_DOUBLE, j, j, MPI_COMM_WORLD, &status); //把其他進程的結果發(fā)送到local中 pi += local;//得到所有的面積和 }}end = MPI_Wtime();//結束計算時間 if (myid == 0){printf("The PI = %.16f on the %s\n", pi, processor_name);printf("Time = %lf\n", end - start);}MPI_Finalize();return 0; }代碼二:
#include<stdio.h>#include<mpi.h>int main(int argc, char *argv[]){int myid, numprocs, namelen;char processor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD, &numprocs);MPI_Get_processor_name(processor_name, &namelen);if (myid == 0) printf("number of processes: %d\n", numprocs);printf("%s: Hello world from process %d \n", processor_name, myid);MPI_Finalize();return 0;}總結
以上是生活随笔為你收集整理的并行程序设计(MPICH环境配置)win10的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称迪士尼放弃元宇宙梦,团队约 50
- 下一篇: 华为李小龙吐槽微博认证失败:不做手机副总