c++ - 通过 MPI 进程同步数组:不正确地使用 MPI_Allgather?
问题描述
我知道之前已经解决了类似的问题,请参阅下文为什么它们不适用于我的案例。我有一段代码如下所示:
int current_rank;
MPI_Comm_rank(MPI_COMM_WORLD, ¤t_rank);
if (current_rank==ROOT_RANK){
...
#pragma omp for
for (long i = 0; i < num; i++) {
auto &choumbie = catalogue->get()[i];
/* array choumbie is modified */}
...}
然后我想在所有进程中同步数组“choumbie”。我试图按照这个例子和文档来实现它。所以,在 if (current_rank==ROOT_RANK) 之后,我做了:
int gsize;
int *rbuf; // address of receive buffer
auto &choumbie = catalogue->get();
MPI_Comm_size(comm, &gsize);
int send_count=num;
rbuf = (int*)malloc(gsize*send_count*sizeof(double));
MPI_Allgather(choumbie,send_count, MPI_DOUBLE, rbuf, send_count, MPI_DOUBLE, comm);
我认为我要同步的数组 'choumbie' 不会以这种方式输入,但我也没有找到任何其他有用的示例。看起来第一个参数必须是要发送的数组的内存地址,但这似乎与我上面提供的示例不一致。
PS:每个等级的num都是一样的。
这个问题对我来说没有帮助,因为我想使用 MPI_Allgather(也在 C++ 中,而不是 Fortran)。这对我来说也没有帮助,因为我想避免使用 MPI_Barrier。
解决方案
只要num
每个等级都相同,这很接近。这取决于catalogue->get();
给你什么。我将假设它是一个整数数组。你应该只需要:
MPI_Allgather(choumbie,send_count, MPI_INT, rbuf, send_count, MPI_INT, comm);
推荐阅读
- excel - 使用匹配的主题和开始时间从 Office365 活动中将与会者提取到 Excel 中
- php - 我想在日期之间过滤后从数据库中获取数据。我试过但没有找到数据
- ios - 不知何故结合搜索控制器不起作用,知道吗?
- javascript - 如何将嵌套函数导出为模块
- sql - 根据其他列值选择最流行的歌曲
- ubuntu - Couchbase 社区版 6.0 无法创建索引?
- python - 为什么 Python 认为 return_value 是一个字符串?
- java - 如何增加 15 分钟的时间并处理溢出?
- matlab - 在 MATLAB 中查找具有相似特征的 N 个观测值
- javafx - 即使正确填充数据,JavaFX tableView 也不显示数据