私は MPI プログラミングを行っていますが、その機能を使用することは私には少しわかりません。4 つのプロセッサがあり、それぞれが配列を認識しているとします。
P0 : iarr{a0, a1, a2, a3}
P1 : iarr{b0, b1, b2, b3}
P2 : iarr{c0, c1, c2, c3}
P3 : iarr{d0, d1, d2, d3}
そして、別の配列 (oarr) がこれらの値を取得する必要があります。
P0 : oarr{a0, b0, c0, d0}
P1 : oarr{a1, b1, c1, d1}
P2 : oarr{a2, b2, c2, d2}
P3 : oarr{a3, b3, c3, d3}
これが古典的な例または MPI_Alltoall() であることは知っていますが、コードが機能しません。エラー結果としてメモリ マッピング情報が生成されます。
私は C でコーディングしており、私のコードは次のようになります。
int *iarr = NULL, *oarr = NULL;
....
MPI_Alltoall(&iarr, P, MPI_INT, &oarr, P, MPI_INT, MPI_COMM_WORLD);
iarr にはいくつかの値があり、oarr ahs は 0 のみです。私はそれを正しくやっていますか?! http://stackoverflow.com/questions/ask
エラー出力の一部:
[NYPC:20583] *** Process received signal ***
[NYPC:20583] Signal: Segmentation fault (11)
[NYPC:20583] Signal code: Address not mapped (1)
[NYPC:20583] Failing at address: 0x2
[NYPC:20582] *** Process received signal ***
[NYPC:20582] Signal: Aborted (6)
[NYPC:20582] Signal code: (-6)
[NYPC:20583] [ 0] [0xb77d940c]
[NYPC:20583] [ 1] ./ex31(votes_mpi+0x18e) [0x8048e38]
[NYPC:20583] [ 2] ./ex31(main+0x1c0) [0x8048b6c]
[NYPC:20583] [ 3] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xb75684d3]
[NYPC:20582] [ 0] [0xb771740c]
[NYPC:20582] [ 1] [0xb7717424]
[NYPC:20582] [ 2] /lib/i386-linux-gnu/libc.so.6(gsignal+0x4f) [0xb74bb1df]
[NYPC:20582] [ 3] /lib/i386-linux-gnu/libc.so.6(abort+0x175) [0xb74be825]
[NYPC:20582] [ 4] /lib/i386-linux-gnu/libc.so.6(+0x6b39a) [0xb74f839a]
[NYPC:20582] [ 5] /lib/i386-linux-gnu/libc.so.6(+0x75ee2) [0xb7502ee2]