[英]best way to allocate memory in C for parallel programming openmp and 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 ();
}
现在我的问题是
我在哪里指定
请问有什么可以帮助我的,因为我是这种语言的新手,对此了解不多。
MPI是一种通信协议。 如果您不知道您正在使用哪个平台/库,我们将为您提供帮助。 如果您知道使用的是哪个库,则很可能网上有一个示例显示如何使用它进行蒙特卡洛模拟。
首先,您的示例代码不是有效的C代码。 #define行应如下所示:
#define a 4
通常在运行程序时指定处理器的数量,通常通过
mpiexec -np PROCS MPIPROG
等等,其中PROCS是要启动的MPI任务的数量,MPIPROG是已编译的MPI可执行文件的名称。 也有可能从MPI内部生成MPI任务,但是这种方法并非在所有地方都有效,因此我不建议这样做。 在运行时指定任务数量的优势在于,您可以根据所使用的平台来选择要使用的任务数量。
在调用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.