MPI_Scatterv ============ .. literalinclude:: mpi_sample6.cpp :language: c++ :linenos: :download:`Download the source code` MPI_Scatterv は、MPI_Scatter と似て、配列データをルートから各rankに分配しますが、 分配の個数を宛先rankごとに独立に指定します。 送られてくるデータの個数が実行時に決まり、受信側では分からないような場合には、 データ本体を送るのに先立って、データの個数を送信側から受信側に伝える必要があります。 そのために、このサンプルでは一旦 MPI_Scatter を使って送信データ数だけを各rankに 伝達した後で、 MPI_Scatterv を使ってデータ本体を送っています。 各rankに送るデータの個数は、ルートrankにおいて乱数で決めています。 受信側では伝えられた個数に合わせて受信バッファの大きさを調整します。 openmpiによる実行例を示します。:: $ mpic++ -o mpi_sample6 mpi_sample6.cpp $ mpiexec -n 4 mpi_sample6 rank: 0, send_data: [ 0 1 2 3 4 5 6 7 10 11 12 13 14 15 20 21 22 23 24 25 26 30 31 32 33 34 ] rank: 0, recv_data: [ 0 1 2 3 4 5 6 7 ] rank: 1, recv_data: [ 10 11 12 13 14 15 ] rank: 2, recv_data: [ 20 21 22 23 24 25 26 ] rank: 3, recv_data: [ 30 31 32 33 34 ]