gpt4 book ai didi

c++ - MPI_Barrier 和递归

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:48 26 4
gpt4 key购买 nike

我正在尝试使用 MPI_Barrier (OpenMPI) 强制所有进程处于递归调用的相同深度。

这是代码

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <mpi.h>

using namespace std;

void recursive_function(int,int,int);

int main(int argc, char *argv[]) {
int rank, size;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

recursive_function(0,3,rank);

MPI_Finalize();
}

void recursive_function(int depth, int limit, int rank) {
printf("depth: %d, processor %d\n", depth, rank);

MPI_Barrier(MPI_COMM_WORLD);
if(depth == limit) return;
else recursive_function(depth+1,limit,rank);
}

我得到的是(使用 mpirun -np 2 barrier 运行)

depth: 0, processor 0
depth: 1, processor 0
depth: 2, processor 0
depth: 3, processor 0
depth: 0, processor 1
depth: 1, processor 1
depth: 2, processor 1
depth: 3, processor 1

虽然我希望是这样的

depth: 0, processor 0
depth: 0, processor 1
depth: 1, processor 0
depth: 1, processor 1
depth: 2, processor 1
depth: 2, processor 0
depth: 3, processor 1
depth: 3, processor 0

最佳答案

无法保证 MPI 进程中的标准输出以任何方式排序。

也就是说,您需要让进程进行通信以证明它们都处于相同的递归深度。例如。在屏障之后,每个进程 != 0 发送一条消息到 rank 0 打印一些东西。

关于c++ - MPI_Barrier 和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com