Я использую OpenMPI с компилятором Intel C ++ в системе Intel Ubuntu. Всякий раз, когда я пытаюсь заменить 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
соответственно.
Я понятия не имею, почему это происходит. Буду признателен за любой совет.
Прежде всего, если вы не собираетесь использовать одностороннюю связь MPI-2, совершенно не нужно заменять операторы управления памятью C ++ вызовами MPI.
Во-вторых, правильное использование MPI_ALLOC_MEM
а также MPI_FREE_MEM
в C / C ++ выглядит следующим образом:
int *arr;
MPI_Alloc_mem(sizeof(int)*1000, MPI_INFO_NULL, &arr); // <-- here arr by address
...
MPI_Free_mem(arr); // <-- here arr by value
Других решений пока нет …