Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI_Recv行为_C_Mpi - Fatal编程技术网

MPI_Recv行为

MPI_Recv行为,c,mpi,C,Mpi,我正在用C编写一个MPI应用程序,我遇到了一些问题 我有这样的想法: if (rank == 0) { toRank = 1; for(i=3;i<=k;i++) { MPI_Send(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD); printf(%d\n", result); MPI_Recv(&result, 1, MPI_INT, toRank,

我正在用C编写一个MPI应用程序,我遇到了一些问题

我有这样的想法:

if (rank == 0)
{
    toRank = 1;
    for(i=3;i<=k;i++)
    {
        MPI_Send(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD);
        printf(%d\n", result);

        MPI_Recv(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        printf("%d\n", result);

        toRank++;
        if (toRank >= numProcessos)
            toRank = 1;
    }
}
else
{
    MPI_Recv(&k, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    printf("%d\n", k);

    MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);  
}
if(秩==0)
{
toRank=1;

对于(i=3;i“另一条消息”是什么意思?您的节点(主节点除外)只接收一条消息,您可以这样实现它。例如:主节点将X发送到节点1..然后..经过一段时间..主节点必须将另一个值发送到节点1..但是在第一条消息之后..节点1无法接收任何..printf在工作节点MPI_Recv从不出现之后否,
MPI_Recv()
的第二个参数仅说明消息的最大长度。如果要让节点等待更多消息,则必须将它们包装在某种循环中(就像主节点那样),再次重复该步骤。此外,主节点不能使用
MPI_Recv()
同时接收两条消息,因为您必须指定发件人(
toRank
)它是一个阻塞函数,等待收到消息后再进行处理。有多种方法可以做到这一点,但这偏离了主题。您可能需要查看
MPI\u Gather()
MPI\u Irecv()
阅读他们的文档,可能会在网上找到一些示例,然后决定哪一个更适合您的应用程序从任何级别接收都是可能的-只需在
MPI\u Recv
MPI\u Irecv
中指定
MPI\u any\u SOURCE
作为发件人的级别。然后可以通过检查
MPI\u获得实际级别OURCE
输出状态参数的字段。