0

私はこの夏に MPI をマスターする予定です。Peter Pacheco による「並列プログラミング入門」を読み始め、その演習問題を解決しました。MPI 演習の 1 つで、彼は MPI_Scan で単純なプレフィックス サムを実装するように求めましたが、MPI_Scan では実装できませんでした。MPI_Scatter と MPI_Gather を使用して解決策を見つけました。MPI_Scan の答えを見つけるのを手伝ってください。

// declaring array and result
// generating random array
MPI_Bcast( &array, n, MPI_FLOAT, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Scan(array, result, n, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);

結果にプレフィックスサムが含まれることを期待していますが、何らかの理由で機能していません。

4

1 に答える 1

3

操作を使用してプレフィックスサムMPI_PRODを取得していないことは間違いありません-操作を使用する必要がありますMPI_SUM。また、要素ごとに機能することMPI_Scanに注意してください。MPI_Reducearray

result[i] = array_0[i] op array_1[i] op array_2[i] op ... (i = 0,...,n-1)

ここarray_0で、 はプロセス 0array_1の配列、 はプロセス 1 の配列などです。for 、forなどのハンドルでop指定された操作です。MPI_OpMPI_SUM+MPI_PROD*

プロセスの数と同じ数の要素を持つ配列がある場合、最初にプロセスごとMPI_Scatterに要素の長さで実行する必要があり、その後に. より大きな配列については、この質問を参照してください。1MPI_Scan

于 2012-08-06T09:23:03.067 に答える