gpt4 book ai didi

C:信号代码:地址未映射(1)mpirecv

转载 作者:太空狗 更新时间:2023-10-29 14:56:02 26 4
gpt4 key购买 nike

我用 C 语言用 MPI 编写了以下代码:

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

int main(int argc, char *argv[])
{
int size, rank;
MPI_Status status;
int buf[1000];

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

if (rank == 0) {
int i = 0;

while (i != 1000) {
buf[i] = i;
i++;
}

MPI_Send(buf, 999, MPI_INT, 1, 1, MPI_COMM_WORLD);
printf("msg has been sent\n");
}

if (rank == 1) {
int sz = sizeof(buf);
int lst = buf[sz-1];

MPI_Recv(buf, 999, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
printf("la taille du buf %d et dernier %d", sz, lst);
}

MPI_Finalize();
}

运行后它会给出这样的信息:

msg has been sente
[blitzkrieg-TravelMate-P253:03395] *** Process received signal ***
[blitzkrieg-TravelMate-P253:03395] Signal: Segmentation fault (11)
[blitzkrieg-TravelMate-P253:03395] Signal code: Address not mapped (1)
[blitzkrieg-TravelMate-P253:03395] Failing at address: 0xbfee8574
[blitzkrieg-TravelMate-P253:03395] [0] [0xb772d40c]
[blitzkrieg-TravelMate-P253:03395] [1] mpii(main+0x12f) [0x8048883]
[blitzkrieg-TravelMate-P253:03395] [2] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xb74c84d3]
[blitzkrieg-TravelMate-P253:03395] [3] mpii() [0x80486c1]
[blitzkrieg-TravelMate-P253:03395] *** End of error message ***

mpirun 注意到节点 blitzkrieg- 上 PID 为 3395 的进程等级为 1

TravelMate-P253 在信号 11(段错误)上退出。

任何建议都会有所帮助。

最佳答案

堆栈跟踪显示错误不在问题标题所暗示的 MPI_Recv 中。错误其实在这里:

int sz = sizeof(buf);
int lst = buf[sz-1]; // <---- here

因为 buf 是一个 int 数组,sizeof(buf) 以字节为单位返回它的大小,sz设置为数组中元素数的 4 倍。访问 buf[sz-1] 超出了 buf 的范围,进入进程堆栈上方的未映射内存区域。

您应该将数组的总大小除以其中一个元素的大小,例如第一个:

int sz = sizeof(buf) / sizeof(buf[0]);
int lst = buf[sz-1];

关于C:信号代码:地址未映射(1)mpirecv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30275341/

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