{"id":58,"date":"2021-06-06T17:31:19","date_gmt":"2021-06-06T09:31:19","guid":{"rendered":"https:\/\/swordofmorning.com\/?p=58"},"modified":"2025-10-09T13:56:21","modified_gmt":"2025-10-09T05:56:21","slug":"parallel-computing-mpi-function-summary","status":"publish","type":"post","link":"https:\/\/swordofmorning.com\/index.php\/2021\/06\/06\/parallel-computing-mpi-function-summary\/","title":{"rendered":"\u5e76\u884c\u8ba1\u7b97 MPI \u51fd\u6570\u603b\u7ed3"},"content":{"rendered":"<p><div class=\"has-toc have-toc\"><\/div><\/p>\n<h3>MPI_Init<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Init(int* argc, char** argv[]);\nMPI_Init(&amp;argc, &amp;argv);    \/\/ argc, argv form main<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u544a\u77e5MPI\u7cfb\u7edf\u8fdb\u884c\u6240\u6709\u5fc5\u8981\u7684\u521d\u59cb\u5316\u8bbe\u7f6e\u3002\u4f8b\u5982\uff0c\u7cfb\u7edf\u53ef\u80fd\u9700\u8981\u4e3a\u6d88\u606f\u7f13\u51b2\u533a\u5206\u914d\u5b58\u50a8\u7a7a\u95f4\uff0c\u4e3a\u8fdb\u7a0b\u6307\u5b9a\u8fdb\u7a0b\u53f7\u7b49\u3002\u5728\u8c03\u7528MPI_Init\u524d\u4e0d\u5e94\u8be5\u8c03\u7528\u5176\u4ed6MPI\u51fd\u6570\u3002<\/p>\n<h3>MPI_Finalize<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Finalize();<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u544a\u77e5MPI\u7cfb\u7edfMPI\u5df2\u7ecf\u6240\u4f7f\u7528\u5b8c\u6bd5\uff0c\u4e3aMPI\u800c\u5206\u914d\u7684\u6240\u6709\u8d44\u6e90\u90fd\u53ef\u4ee5\u91ca\u653e\u3002<\/p>\n<h3>MPI_Comm_size<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Comm_size (MPI_Comm comm ,int* size )\n\nint numprocs;\nMPI_Comm_size(MPI_COMM_WORLD, &amp;numprocs);      \/\/ get number of processes<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u83b7\u5f97\u8fdb\u7a0b\u4e2a\u6570 size\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;\u6307\u5b9a\u4e00\u4e2a\u901a\u4fe1\u5b50,\u4e5f\u6307\u5b9a\u4e86\u4e00\u7ec4\u5171\u4eab\u8be5\u7a7a\u95f4\u7684\u8fdb\u7a0b, \u8fd9\u4e9b\u8fdb\u7a0b\u7ec4\u6210\u8be5\u901a\u4fe1\u5b50\u7684group\uff08\u7ec4\uff09\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;\u83b7\u5f97\u901a\u4fe1\u5b50comm\u4e2d\u89c4\u5b9a\u7684group\u5305\u542b\u7684\u8fdb\u7a0b\u7684\u6570\u91cf\u3002<\/p>\n<h3>MPI_Comm_rank<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Comm_rank (MPI_Comm comm ,int* rank)\n\nint myid;\nMPI_Comm_rank(MPI_COMM_WORLD, &amp;myid);  \/\/ get current process id<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u5f97\u5230\u672c\u8fdb\u7a0b\u5728\u901a\u4fe1\u7a7a\u95f4\u4e2d\u7684rank\u503c,\u5373\u5728\u7ec4\u4e2d\u7684\u903b\u8f91\u7f16\u53f7(\u8be5 rank\u503c\u4e3a0\u5230p-1\u95f4\u7684\u6574\u6570,\u76f8\u5f53\u4e8e\u8fdb\u7a0b\u7684ID\u3002)<\/p>\n<h3>MPI_Send<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Send(\n    void *buff, int count, MPI_Datatype datatype,\n    int dest, int tag, MPI_Comm comm\n)\n\nMPI_Send(message, strlen(message), MPI_CHAR, 1,99,MPI_COMM_WORLD);<\/code><\/pre>\n<blockquote><p>\n&nbsp;&nbsp;&nbsp;&nbsp;void *buff\uff1a\u4f60\u8981\u53d1\u9001\u7684\u53d8\u91cf\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int count\uff1a\u4f60\u53d1\u9001\u7684\u6d88\u606f\u7684\u4e2a\u6570\uff08\u6ce8\u610f\uff1a\u4e0d\u662f\u957f\u5ea6\uff0c\u4f8b\u5982\u4f60\u8981\u53d1\u9001\u4e00\u4e2aint\u6574\u6570\uff0c\u8fd9\u91cc\u5c31\u586b\u51991\uff0c\u5982\u8981\u662f\u53d1\u9001\u201chello\u201d\u5b57\u7b26\u4e32\uff0c\u8fd9\u91cc\u5c31\u586b\u51996\uff08C\u8bed\u8a00\u4e2d\u5b57\u7b26\u4e32\u672a\u6709\u4e00\u4e2a\u7ed3\u675f\u7b26\uff0c\u9700\u8981\u591a\u4e00\u4f4d\uff09\uff09\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;MPI_Datatype datatype\uff1a\u4f60\u8981\u53d1\u9001\u7684\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u91cc\u9700\u8981\u7528MPI\u5b9a\u4e49\u7684\u6570\u636e\u7c7b\u578b\uff0c\u53ef\u5728\u7f51\u4e0a\u627e\u5230\uff0c\u5728\u6b64\u4e0d\u518d\u7f57\u5217\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int dest\uff1a\u76ee\u7684\u5730\u8fdb\u7a0b\u53f7\uff0c\u4f60\u8981\u53d1\u9001\u7ed9\u54ea\u4e2a\u8fdb\u7a0b\uff0c\u5c31\u586b\u5199\u76ee\u7684\u8fdb\u7a0b\u7684\u8fdb\u7a0b\u53f7\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int tag\uff1a\u6d88\u606f\u6807\u7b7e\uff0c\u63a5\u6536\u65b9\u9700\u8981\u6709\u76f8\u540c\u7684\u6d88\u606f\u6807\u7b7e\u624d\u80fd\u63a5\u6536\u8be5\u6d88\u606f\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;MPI_Comm comm\uff1a\u901a\u8baf\u57df\u3002\u8868\u793a\u4f60\u8981\u5411\u54ea\u4e2a\u7ec4\u53d1\u9001\u6d88\u606f\u3002\n<\/p><\/blockquote>\n<h3>MPI_Recv<\/h3>\n<pre><code class=\"language-cpp\">int MPI_Recv(\n    void *buff, int count, MPI_Datatype datatype,\n    int source, int tag, MPI_Comm comm, MPI_Status *status\n)\n\nMPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &amp;status);<\/code><\/pre>\n<blockquote><p>\n&nbsp;&nbsp;&nbsp;&nbsp;void <em>buff\uff1a\u4f60\u63a5\u6536\u5230\u7684\u6d88\u606f\u8981\u4fdd\u5b58\u5230\u54ea\u4e2a\u53d8\u91cf\u91cc\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int count\uff1a\u4f60\u63a5\u6536\u6d88\u606f\u7684\u6d88\u606f\u7684\u4e2a\u6570\uff08\u6ce8\u610f\uff1a\u4e0d\u662f\u957f\u5ea6\uff0c\u4f8b\u5982\u4f60\u8981\u53d1\u9001\u4e00\u4e2aint\u6574\u6570\uff0c\u8fd9\u91cc\u5c31\u586b\u51991\uff0c\u5982\u8981\u662f\u53d1\u9001\u201chello\u201d\u5b57\u7b26\u4e32\uff0c\u8fd9\u91cc\u5c31\u586b\u51996\uff08C\u8bed\u8a00\u4e2d\u5b57\u7b26\u4e32\u672a\u6709\u4e00\u4e2a\u7ed3\u675f\u7b26\uff0c\u9700\u8981\u591a\u4e00\u4f4d\uff09\uff09\u3002\u5b83\u662f\u63a5\u6536\u6570\u636e\u957f\u5ea6\u7684\u4e0a\u754c. \u5177\u4f53\u63a5\u6536\u5230\u7684\u6570\u636e\u957f\u5ea6\u53ef\u901a\u8fc7\u8c03\u7528MPI_Get_count \u51fd\u6570\u5f97\u5230\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;MPI_Datatype datatype\uff1a\u4f60\u8981\u63a5\u6536\u7684\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u91cc\u9700\u8981\u7528MPI\u5b9a\u4e49\u7684\u6570\u636e\u7c7b\u578b\uff0c\u53ef\u5728\u7f51\u4e0a\u627e\u5230\uff0c\u5728\u6b64\u4e0d\u518d\u7f57\u5217\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int dest\uff1a\u63a5\u6536\u7aef\u8fdb\u7a0b\u53f7\uff0c\u4f60\u8981\u9700\u8981\u54ea\u4e2a\u8fdb\u7a0b\u63a5\u6536\u6d88\u606f\u5c31\u586b\u5199\u63a5\u6536\u8fdb\u7a0b\u7684\u8fdb\u7a0b\u53f7\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;int tag\uff1a\u6d88\u606f\u6807\u7b7e\uff0c\u9700\u8981\u4e0e\u53d1\u9001\u65b9\u7684tag\u503c\u76f8\u540c\u7684\u6d88\u606f\u6807\u7b7e\u624d\u80fd\u63a5\u6536\u8be5\u6d88\u606f\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;MPI_Comm comm\uff1a\u901a\u8baf\u57df\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;MPI_Status <\/em>status\uff1a\u6d88\u606f\u72b6\u6001\u3002\u63a5\u6536\u51fd\u6570\u8fd4\u56de\u65f6\uff0c\u5c06\u5728\u8fd9\u4e2a\u53c2\u6570\u6307\u793a\u7684\u53d8\u91cf\u4e2d\u5b58\u653e\u5b9e\u9645\u63a5\u6536\u6d88\u606f\u7684\u72b6\u6001\u4fe1\u606f\uff0c\u5305\u62ec\u6d88\u606f\u7684\u6e90\u8fdb\u7a0b\u6807\u8bc6\uff0c\u6d88\u606f\u6807\u7b7e\uff0c\u5305\u542b\u7684\u6570\u636e\u9879\u4e2a\u6570\u7b49\u3002\n<\/p><\/blockquote>\n<h3>\u5b9e\u4f8b \u2013 Send\u4e0eRecv<\/h3>\n<pre><code class=\"language-cpp\">#include &quot;mpi.h&quot;\nmain( argc, argv )\nint argc;   char **argv;\n{\n     char message[20];\n     int myrank;\n     MPI_Status status;\n     MPI_Init( &amp;argc, &amp;argv );\n     MPI_Comm_rank( MPI_COMM_WORLD, &amp;myrank );\n     if (myrank == 0) \/*  \u82e5\u662f 0  \u8fdb\u7a0b*\/\n     {  \n          strcpy(message,&quot;C:Hello, process 1&quot;);\n          MPI_Send(message, strlen(message), MPI_CHAR, 1,99,MPI_COMM_WORLD);\n     }\n     else if(myrank==1) \/*  \u82e5\u662f\u8fdb\u7a0b 1 *\/\n     {\n         MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &amp;status);\n         printf(&quot;received :%s:&quot;, message);\n     }\n     MPI_Finalize();\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>MPI_Init int MPI_Init(int* argc, char** argv[]); MPI_Init(&amp;ar &#8230;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69],"tags":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/posts\/58"}],"collection":[{"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/comments?post=58"}],"version-history":[{"count":1,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/posts\/58\/revisions"}],"predecessor-version":[{"id":1046,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/posts\/58\/revisions\/1046"}],"wp:attachment":[{"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/media?parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/categories?post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swordofmorning.com\/index.php\/wp-json\/wp\/v2\/tags?post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}