如何在此功能中没有通信过程?
How to do without communication processes in this function?
我有一个函数main,我只想在其中执行1次(即仅在0个进程中执行(的代码,除了调用multiStrassen函数的一行 - 我想通过所有进程(0-7个进程(执行这一行。是否可以不使用MPI_Send和MPI_Recv来通信进程?我可以做一些更容易的事情吗?因为那时我需要将大量复杂数据从 0 进程传输到所有其他进程(我在 multiStrassen 函数中这样做,并且不想在这里做,因为我的代码最终变得不可读(。一行破坏了一切...
int main(int argc, char** argv) {
int WORLD_RANK, WORLD_SIZE;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &WORLD_RANK);
MPI_Comm_size(MPI_COMM_WORLD, &WORLD_SIZE);
...
int dimensionNew = ...
vector<vector<int>> matrixA = ...
vector<vector<int>> matrixB = ...
vector<vector<int>> matrixC1(dimensionNew, vector<int>(dimensionNew));
clock_t start2, end2;
start2 = clock();
matrixC1 = multiStrassen(matrixA, matrixB, dimensionNew); //this line
end2 = clock();
double answer2 = ((double) end2 - start2) / (CLOCKS_PER_SEC);
cout << "Strassen = " << answer2 << " sec." << endl;
MPI_Finalize();
return 0;
}
您可以简单地使用MPI_Comm_rank
来获得进程 ID:
int rank;
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
然后,通过检查此值,可以决定调用或不调用代码的哪些部分:
if (rank == 0)
{
// this code only is called by the rank-0 process
}
// this code is called by all of the processes
此外,考虑到multiStrassen(...)
将在所有进程上执行的事实,您需要提供其输入(例如matrixA
,matrixB
和dimensionNew
(通过发送它们(从一个进程到每个进程(或通过在每个进程中计算它们。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 是否删除在对象构造过程中创建的对象
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 如何在鼠标挂钩过程中检测拖动
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- clang 插件:在编译过程中修改 AST
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何使变量从 x 到 y,然后从 y 返回到 x 并始终重复该过程
- 在C++中调用 MS SQL 存储过程
- 如何在此功能中没有通信过程?
- 如何检测和与Linux下的另一个过程进行通信
- 推荐的方法让PHP与同一服务器上的过程进行通信
- 是否可以将.NET并发集合用于X64通信的过程间X32
- 是否有推荐的设计模式用于与过程通信参数
- 串行通信:0x0D在传输过程中被0x0A取代