日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并行程序设计(MPICH环境配置)win10

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并行程序设计(MPICH环境配置)win10 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 下載安裝msmpisdk.msi和msmpisetup.exe
  • 下載網址:Downloads | MPICH

    ?


    進去后選擇最新版下載:


    點擊下載:

    ?

    ?


    然后全選:


    下載完成后直接安裝即可。

    ?

  • 配置環境
  • 新建Win32項目:

    ?


    點擊下一步,然后選擇“控制臺應用程序”和“空項目”:


    ?

    ?

    打開項目,創建一個新的.cpp文件,選擇“調試”—“屬性”,打開屬性界面然后更改包含目錄和庫目錄,include文件夾和lib文件夾,都在安裝目錄下,添加自己的安裝目錄。

    ?


    在C/C++-預處理器中的預處理定義中添加_CRT_SECURE_NO_WARNINGS(解決scanf報警的問題(針對vs2012以上版本))和 MPICH_SKIP_MPICXX

    代碼生成-運行庫-選擇多線程調試(/MTd)

    ?


    配置管理器進行修改,保證一致:


    運行得到一個exe文件。

    ?

  • 測試代碼
  • 測試:運行exe文件,多進程計算pi值,代碼放在附錄,運行截圖:

    ?

    ?


    如圖所示,當計算機節點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; /*進程數,該變量為各處理器中的同名變量, 存儲是分布的*///int myid; /*我的進程ID,存儲也是分布的*///int source; /*發送消息的源進程 *///MPI_Status status; /*消息接收狀態變量,存儲也是分布的*///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); /*各進程得到進程數*///MPI_Get_processor_name(processor_name, &namelen); /*取處理器名*///if (myid != 0) {/*建立消息*///sprintf(message, "Greetings from process %d!,my name is %d", myid,namelen);/*發送長度取 strlen(message)+1, 使\0也一同發送出去*///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所對應的函數值 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);//獲取進程總數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的進程計算的結果發送到進程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); //把其他進程的結果發送到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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。