【发布时间】:2014-12-02 21:38:06
【问题描述】:
我目前正在使用 MPI 编写一个 C 程序,我遇到了关于 MPI_Send() 和 MPI_Recv() 函数的障碍,希望大家能帮助我。我的目标是发送(使用 MPI_Send())和接收(使用 MPI_Recv())“a[0][0]”的地址(定义如下),然后在我之后显示该地址的内容从 MPI_Recv() 收到它,以确认我的发送和接收工作正常。我在下面概述了我的问题:
我有一个二维数组“a”,它的工作方式如下: a[0][0] 包含我的目标地址 *a[0][0] 包含我的目标值
即printf("a[0][0] Value = %3.2f, a[0][0] Address = %p\n", *a[0][0], a[0][0]);
所以,我运行我的程序并为 a 分配了内存。 Debug 确认 a[0][0] 包含地址 0x83d6260,并且存储在地址 0x83d6260 的值是 0.58。换句话说,“a[0][0] = 0x83d6260”和“*a[0][0] = 0.58”。
所以,我将地址“a[0][0]”作为 MPI_Send() 的第一个参数传递:
-> MPI_Send(a[0][0], 1, MPI_FLOAT, i, 0, MPI_COMM_WORLD);
// 我把 1 作为第二个参数,因为我只想接收这个地址
MPI_Send()执行返回0,即MPI_SUCCESS,表示成功,我的Debug确认“0x83d6260”就是传递的地址。
但是,当我尝试使用 MPI_Recv() 接收地址时,出现分段错误:
MPI_Recv(a[0][0], 1, MPI_FLOAT, iNumProcs-1, 0, MPI_COMM_WORLD, &status);
地址 0x83d6260 已使用 MPI_Send() 成功发送,但我无法使用 MPI_Recv() 接收相同的地址。我的问题是 - 为什么 MPI_Recv() 会导致段错误?我想在 MPI_Recv() 调用之后立即打印 a[0][0] 中包含的值,但是程序崩溃了。
【问题讨论】: