gpt4 book ai didi

c - 使用 MPI_Finalize() 后出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:03 25 4
gpt4 key购买 nike

我正在使用 openMPI 在 C 中编程。我的代码贴在下面。发生的事情是,每当我运行这个程序时,我都会收到一个段错误。我相信我已经通过使用这些 printf 语句隔离了问题。分段似乎发生在 MPI_Finalize() 之后。非常感谢任何帮助。

我收到的错误是:

[linuxscc003:10019] *** Process received signal ***
[linuxscc003:10019] Signal: Segmentation fault (11)
[linuxscc003:10019] Signal code: Address not mapped (1)

和我的代码:

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

int main(int argc, char** argv)
{
int i = 0; //index
int comm_sz, my_rank;
int part_sum = 0;
//size of the array is hard-coded in,

MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

if(my_rank == 0)
{
int* array;
//generate the array of n elements
printf("There are %d array elements\n", comm_sz);
array = (int*)malloc(sizeof(int*)*comm_sz);
for(i = 0; i < comm_sz; i++)
{
//we don't want to count zero in here
//nobody likes zero
array[i] = (i+1);
}
for(i = 1; i < comm_sz; i++)
{
MPI_Send(&array[i], sizeof(int*), MPI_INT, i, 0, MPI_COMM_WORLD);
}
//part_sum = 1;
free(array);
printf("freed array!\n");
}

if(my_rank != 0)
{
MPI_Recv(&part_sum, sizeof(int*), MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("proc %d out of %d, I have received %d!\n", my_rank, comm_sz, part_sum);

}



printf("proc %d signing off!\n",my_rank);
MPI_Finalize();
printf("proc %d signed off!\n",my_rank);
return 0;
}

最佳答案

在这一行中:

array = (int*)malloc(sizeof(int*)*comm_sz);

sizeof(int*) 应该是 sizeof(int)

在这一行中:

MPI_Send(&array[i], sizeof(int*), MPI_INT, i, 0, MPI_COMM_WORLD);

sizeof(int*) 应该是 1。您指定要发送多少 MPI_INT(而不是多少字节)。 sizeof(int) 可能是 4 或 8,因此您过度读取了缓冲区。

在这一行中:

MPI_Recv(&part_sum, sizeof(int*), MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);

sizeof(int*) 应该是 1,同样的事情。

段错误可能发生在某些进程的 MPI_Finalize() 之前,而您认为它发生在之后,因为其他进程已完成其 MPI_Finalize()。或者可能是因为您在堆栈上覆盖了 part_sum,因此在调用 MPI_Finalize() 之前,损坏的堆栈不会导致问题。

关于c - 使用 MPI_Finalize() 后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723840/

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