0

Intel Ubuntu システムで、Intel C++ コンパイラで OpenMPI を使用しています。new[]and のdelete[]呼び出しをMPI_Alloc_memand の呼び出しにそれぞれ置き換えようとするとMPI_Free_mem、常にセグメンテーション エラーが発生します。

MPI_Alloc_mem呼び出しが返されMPI_SUCCESSます。への呼び出しでセグメンテーション違反が発生しますMPI_Free_memMPI_Alloc_mem通話はMPI_INFO_NULL. void**とのvoid*引数MPI_Alloc_memをそれぞれ明示的に型キャストしMPI_Free_memます。

なぜこれが起こるのか分かりません。アドバイスをいただければ幸いです。

4

1 に答える 1

0

まず、MPI-2の片側通信を使用する場合を除いて、C++メモリ管理演算子をMPI呼び出しに置き換える必要はまったくありません。

MPI_ALLOC_MEM次に、C /C++でのおよびの正しい使用法は次の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
于 2013-03-01T12:37:18.637 に答える