MPI_Bcast ========= .. literalinclude:: mpi_sample3.cpp :language: c++ :linenos: :download:`Download the source code` MPIでは、全てのrankで一斉に同じ関数を呼ぶことで通信を行うタイプの関数が多く存在します。 その中の基本的な関数 MPI_Bcast の例です。 MPI_Bcast にはデータを格納する配列を1つだけ渡します。全てのrankで渡しますが、 ルートとして指定したrankにおいては送信データとして使われ、配列から値が読み出されて 他のrankに送信されます。残りのrankでは配列が受信バッファとして使われ、ルートrankから 送られてきたデータがそこに格納されます。 その結果、関数が終わった時点で配列の内容は全てのrankで同一になります。 パソコンlinuxのopenmpiで実行すると次のようになります。:: $ mpic++ -o mpi_sample3 mpi_sample3.cpp $ mpiexec -n 4 mpi_sample3 rank: 0, data: [ 0 1 2 3 4 5 6 7 8 9 ] rank: 1, data: [ 0 1 2 3 4 5 6 7 8 9 ] rank: 2, data: [ 0 1 2 3 4 5 6 7 8 9 ] rank: 3, data: [ 0 1 2 3 4 5 6 7 8 9 ] ソースと照らし合わせて見ると、rank 0 で用意したデータが全rankに伝達されたことがわかります。