我在Intel Ubuntu系统上使用OpenMPI和Intel C ++编译器。每当我尝试分别使用new[]
和delete[]
来电替换MPI_Alloc_mem
和MPI_Free_mem
来电时,我总会遇到分段错误。
MPI_Alloc_mem
次来电回复MPI_SUCCESS
。在调用MPI_Free_mem
时发生分段错误。 MPI_Alloc_mem
来电是MPI_INFO_NULL
。我明确地分别在void**
和void*
中对MPI_Alloc_mem
和MPI_Free_mem
个参数进行了类型转换。
我不知道为什么会这样。我很感激任何建议。
答案 0 :(得分:0)
首先,除非您打算使用MPI-2单向通信,否则绝对不需要用MPI调用替换C ++内存管理运算符。
其次,在C / C ++中正确使用MPI_ALLOC_MEM
和MPI_FREE_MEM
如下:
int *arr;
MPI_Alloc_mem(sizeof(int)*1000, MPI_INFO_NULL, &arr); // <-- here arr by address
...
MPI_Free_mem(arr); // <-- here arr by value