MPI实现进行验证
MPI implementation to verify
我正在尝试使用MPI_Gather从slave恢复数据。所以基本上,模拟在每个从机上运行(每个从机的wich不相同),我想在主机上恢复一个整数(模拟的结果)。根据每个整数,我在主节点上计算一个新值"a",并将其发送回从属节点,以使用这个更好的参数重新进行新的模拟。我希望是清楚的,我是MPI的新手。
注意:某些模拟不会同时完成。
int main
while(true){
if (rank==0) runMaster();
else runSlave();
}
runMaster()
receive data b of all slave (with MPI_gather)
calculate parameter a for each slave; aTotal=[a_1,...,a_n]
MPI_Scatter(aTotal, to slave)
runSlave()
a=aTotal[rank]
simulationRun(a){return b}
MPI_Gather(&b, to master)
为了避免死锁,每个从机都用一个随机的a.初始化
创建了一个小的测试用例,因为我不知道如何在我的从属设备中使用MPI_Gather
int main (int argc, char *argv[]) {
int size;
int rank;
int a[12];
int i;
int start,end;
int b;
MPI_Init(&argc, &argv);
MPI_Status status;
MPI_Request req;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int* bb= new int[size];
int source;
//master
if(!rank){
while(true){
b=12;
MPI_Recv(&bb[0], 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
source = status.MPI_SOURCE;
printf("master receive b %d from source %d n", bb[0], source);
if (source == 1) goto finish;
}
}
//slave
if(rank){·
b=13;·
if (rank==1) {b=15; sleep(2);}
int source = rank;
printf("slave %d will send b %d n", source, b);
// MPI_Gather(&b,1,MPI_INT,bb,1,MPI_INT,0,MPI_COMM_WORLD); // unworking, not called by master
MPI_Send(&b, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
finish:
MPI_Finalize();
return 0;
}
我正试图用一个集体命令将从数据发送到主数据。
这种实施是否现实?
你的建议听起来很合理。另一种方法是让所有从属服务器一次性向彼此广播结果(MPI_AllGather),然后您可以在每个从属服务器中直接实现评分和下一步尝试什么算法。如果评分算法不太复杂,那么在每个从机中运行它的开销在速度方面是值得的,因为从机根本不必与主机通信,每次迭代只节省一次通信。
相关文章:
- 如果没有malloc,链表实现将失败
- 正在尝试了解输入验证循环
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在C++中检查2D数组中负值的输入验证
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何测试我的谷歌身份验证器实现?
- 如何正确实现 std::all_of 函数来验证字符串的一部分?
- 使用OpenSSL和C 来验证JWT的确切基本64 URL解码规则和实现
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 使用链接列表实现stack类来验证XML文件
- MPI实现进行验证
- 如何实现旋转框的验证器来检查是否(n mod k == 0)
- 使用Objective-C和C++实现X-FACEBOOK-PLATFORM身份验证失败
- 为什么 Boost 使用全局函数覆盖来实现自定义验证程序"Program Options"
- 如何使用C++实现fastcgi身份验证