【发布时间】:2017-08-20 11:00:40
【问题描述】:
我一直在尝试学习 MPI,并且我有这段来自 C 的代码 sn-p,它应该被格式化为 MPI 以使其可并行化;
// this is a dot product
int A[100000];
int B[100000];
int C=0;
for (int i=0 ; i<100000; i++){
c += A[i] * B[i];
}
我对使用 MPI 时如何处理 for 循环有点困惑,但这是我对练习的回答;
// this is a dot product
int A[100000];
int B[100000];
int C=0;
int rootId = 0;
int numtasks, taskId, len, partner, message;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
for (int i=0 ; i<100000; i++){
c = A[i] * B[i];
if(rootId == taskid){
MPI_Send(&A[100000], &B[100000], MPI_INT, 1, 0, MPP_COMM_WORLD, MPI_Status)
}else if (rootId < taskId){
MPI_Recv(C, 100000, MPI_INT, 0, 0, MPP_COMM_WORLD, MPI_Status)
}
MPI_Finalize(); return 0;
}
我不确定这是否正确,但我相信我的方向是正确的......
关于 MPI 的问题是,我真的找不到很好的例子来说明如何用循环重写或构造它 - fortran 中有一些例子,但这不是我熟悉的...... 我只在 MPI 中看到过简单的“Hello world”C 示例......但从那里得到的没有什么用处。
所有帮助将不胜感激..
【问题讨论】:
-
我猜,你正在寻找类似的东西;)stackoverflow.com/questions/45677220/…
-
我没有在那个线程中找到足够的答案......如果你问我,这太复杂了。使用 delta 和提醒变量..我相信它可以更容易地简化...
标签: c parallel-processing mpi message-passing