繁体   English   中英

MPI并行编程

[英]MPI parallel Programming

我在Monte Carlo模拟器程序中有三个用户定义的函数。 main()中,使用适当的参数调用它们。

这是一个串行程序。

如何将其转换为Parallel程序?

到目前为止,我已经完成了使串行程序成为MPI并行程序的步骤:

#include <conio.h>
#include <stdio.h>
#include "mpi.h"

//Global Varibles Declared
#define a=4;
#define b=2;
#define c=4;
#define d=6;

function1(Parameter4, Parameter))
{ 
  // body of function
}

function2( parameter 1, parameter2)
{
  //body of function
}


int main(int argc, char *argv[]) 
{
  // Local Variables defined
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  function1(a, b);
  function2(c, d);
  MPI_Finalize ();
}

现在我的问题是

我在哪里指定

  1. 处理器数量(例如使用2、4、6、8个处理器运行它)
  2. 发送和接收方法
  3. 我如何查看使用不同数量处理器的输出图。

请问有什么可以帮助我的,因为我是这种语言的新手,对此了解不多。

MPI是一种通信协议。 如果您不知道您正在使用哪个平台/库,我们将为您提供帮助。 如果您知道使用的是哪个库,则很可能网上有一个示例显示如何使用它进行蒙特卡洛模拟。

  1. 首先,您的示例代码不是有效的C代码。 #define行应如下所示:

     #define a 4 
  2. 通常在运行程序时指定处理器的数量,通常通过

     mpiexec -np PROCS MPIPROG 

    等等,其中PROCS是要启动的MPI任务的数量,MPIPROG是已编译的MPI可执行文件的名称。 也有可能从MPI内部生成MPI任务,但是这种方法并非在所有地方都有效,因此我不建议这样做。 在运行时指定任务数量的优势在于,您可以根据所使用的平台来选择要使用的任务数量。

  3. 在调用MPI_Init之后和调用MPI_Finalize之后,可以在代码中的任何位置使用Send和Recv。 例如,要将整数从任务0发送到任务1,您可以使用类似

     int number; if (rank == 0) { /* compute the number on proc 0 */ number = some_complex_function(); /* send the number to proc 1 */ MPI_Send(&number, 1, MPI_INT, 1, 42, MPI_COMM_WORLD); } else if (rank == 1) { /* receive the number from proc 0 */ MPI_Recv(&number, 1, MPI_INT, 0, 42, MPI_COMM_WORLD, 0); } // now both procs can do something with the number 

    请注意,在这种情况下,任务1将必须等待,直到从任务0收到该数字,因此在实际应用程序中,您可能希望任务1进行一些工作,而任务0计算“ some_complex_function”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM