Message Passing Subroutine 齋藤グループ 小林直樹 1対1通信 ブロッキング通信 • MPI_SEND • MPI_RECV ノンブロッキング通信 • MPI_ISEND • MPI_IRECV • MPI_WATE ブロッキング通信 受信側 送信側 1. 送信データ a を用意 2. mpi_send(a, ・・・) 待ち 1. mpi_recv(a, ・・・) システム (ドライバ) システム (ドライバ) 待ち 3. 送信完了 2. 受信完了 4. 次の処理へ 3. 次の処理へ MPI_SEND SUBROUTINE MPI_SEND(BUF, COUNT, DATATYPE, ROOT, TAG,COMM, IERROR) 引数 BUF COUNT DATATYPE ROOT TAG COMM IERROR 送信する変数,配列名の先頭アドレス 送信するデータの数 送信するデータの型 受信プロセスのランク メッセージ識別番号 コミュニケータ(通信グループの識別子) 戻り値(エラーコード) MPI_RECV SUBROUTINE MPI_RECV(BUF, COUNT, DATATYPE, ROOT, TAG,COMM, STATUS, IERROR) 引数 BUF COUNT DATATYPE ROOT TAG COMM STATUS IERROR 受信する変数,配列名の先頭アドレス 受信するデータの数 受信するデータの型 送信プロセスのランク メッセージ識別番号 コミュニケータ(通信グループの識別子) 送信プロセスの情報 戻り値(エラーコード) ノンブロッキング通信 送信側 受信側 1. 送信データ a を用意 1. mpi_irecv(a,・,ireq,・) 2. mpi_isend(a,・, ireq,・) 2. 次の処理 3. 次の処理 (受信完了を待たなくても 進めることが可能な処理) (受信完了を待たなくても 進めることが可能な処理) 4. mpi_wait(ireq,・・・) 待ち 5. 送信完了 6. 次の処理へ システム (ドライバ) システム (ドライバ) 3. mpi_wait(ireq,・・・) 待ち 4. 受信完了 5. 次の処理へ MPI_ISEND SUBROUTINE MPI_ISEND(BUF, COUNT, DATATYPE, ROOT, TAG,COMM, REQUEST, IERROR) 引数 BUF COUNT DATATYPE ROOT TAG COMM REQUEST IERROR 送信する変数,配列名の先頭アドレス 送信するデータの数 送信するデータの型 受信プロセスのランク メッセージ識別番号 コミュニケータ(通信グループの識別子) 通信識別番号 戻り値(エラーコード) MPI_IRECV SUBROUTINE MPI_IRECV(BUF, COUNT, DATATYPE, ROOT, TAG,COMM, STATUS, IERROR) 引数 BUF COUNT DATATYPE ROOT TAG COMM REQUEST IERROR 受信する変数,配列名の先頭アドレス 受信するデータの数 受信するデータの型 送信プロセスのランク メッセージ識別番号 コミュニケータ(通信グループの識別子) 通信識別番号 戻り値(エラーコード) MPI_WAIT SUBROUTINE MPI_WAIT(REQUEST, STATUS, IERROR) 引数 REQUEST STATUS IERROR 通信識別番号 送信プロセスの情報 戻り値(エラーコード) 集団通信 • MPI_BCAST • MPI_SCATTER • MPI_GATHER • MPI_ALLGATHER • MPI_ALLTOALL • MPI_REDUCE • MPI_ALLREDUCE • MPI_BARRIER MPI_BCAST SUBROUTINE MPI_BCAST(BUF, COUNT, DATATYPE, 引数 BUF COUNT DATATYPE ROOT COMM IERROR ROOT,COMM, IERROR) 送信する変数,配列名の先頭アドレス 送信するデータの数 送信するデータの型 送信プロセスのランク コミュニケータ(通信グループの識別子) 戻り値(エラーコード) プロセス 0 1 2 3 A A A A A MPI_SCATTER SUBROUTINE MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,RECVTYPE, 引数 ROOT, COMM, IERROR) SENDBUF 送信する変数,配列名の先頭アドレス SENDCOUNT 送信するデータの数 SENDTYPE 送信するデータの型 RECVBUF 受信する変数,配列名の先頭アドレス RECVCOUNT 受信するデータの数 RECVTYPE 受信するデータの型 ROOT 送信プロセスのランク COMM コミュニケータ プロセス0 X1 X2 X3 X4 IERROR 戻り値 X1 プロセス1 X2 プロセス2 X3 プロセス3 X4 MPI_GATHER SUBROUTINE MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,RECVTYPE, 引数 ROOT, COMM, IERROR) SENDBUF 送信する変数,配列名の先頭アドレス SENDCOUNT 送信するデータの数 SENDTYPE 送信するデータの型 RECVBUF 受信する変数,配列名の先頭アドレス RECVCOUNT 受信するデータの数 RECVTYPE 受信するデータの型 ROOT 受信プロセスのランク COMM コミュニケータ プロセス0 X1 IERROR 戻り値 プロセス1 X 2 プロセス2 X3 プロセス3 X4 X1 X2 X3 X4 MPI_ALLGATHER SUBROUTINE MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,RECVTYPE, 引数 , COMM, IERROR) SENDBUF 送信する変数,配列名の先頭アドレス SENDCOUNT 送信するデータの数 SENDTYPE 送信するデータの型 RECVBUF 受信する変数,配列名の先頭アドレス RECVCOUNT 受信するデータの数 RECVTYPE 受信するデータの型 COMM コミュニケータ IERROR 戻り値 プロセス0 X1 X1 X2 X3 X4 プロセス1 X2 X1 X2 X3 X4 プロセス2 X3 X1 X2 X3 X4 プロセス3 X4 X1 X2 X3 X4 MPI_ALLTOALL SUBROUTINE MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,RECVTYPE, 引数 , COMM, IERROR) SENDBUF 送信する変数,配列名の先頭アドレス SENDCOUNT 送信するデータの数 SENDTYPE 送信するデータの型 RECVBUF 受信する変数,配列名の先頭アドレス RECVCOUNT 受信するデータの数 RECVTYPE 受信するデータの型 COMM コミュニケータ IERROR 戻り値 プロセス0 A1 A2 A3 A4 A1 B1 C D2 プロセス1 B1 B2 B3 B4 A2 B2 1C D2 プロセス2 C1 C2 C3 C4 A3 B3 2C D3 プロセス3 D1 D2 D3 D4 A4 B4 3C D4 4 MPI_REDUCE SUBROUTINE MPI_REDUCE(SENDBUF,RECVBUF,COUNT ,DATATYPE,OP,ROOT,COMM,IERROR) 引数 SENDBUF RECVBUF COUNT DATATYPE OP ROOT COMM IERROR 送信する変数、配列名の先頭アドレス 受信する変数、配列名の先頭アドレス 送信するデータの数 送信するデータの型 演算 受信元のプロセスのランク コミュニケータ(通信グループの識別子) 戻り値(エラーコード) プロセス0 1 プロセス1 2 プロセス2 3 プロセス3 4 10 MPI_ALLREDUCE SUBROUTINE MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR) 引数 SENDBUF RECVBUF COUNT DATATYPE OP COMM IERROR 送信する変数、配列名の先頭アドレス 受信する変数、配列名の先頭アドレス 送信するデータの数 送信するデータの型 演算 コミュニケータ(通信グループの識別子) 戻り値(エラーコード) プロセス0 1 10 プロセス1 2 10 プロセス2 3 10 プロセス3 4 10 MPI_BARRIER SUBROUTINE MPI_BARRIER(COMM, IERROR) 引数 COMM IERROR コミュニケータ(通信グループの識別子) 戻り値(エラーコード) プロセス 0 t 1 処理 A0 処理 A1 処理 B0 処理 B1 2 処理 A2 処理 B2 mpi_barrier
© Copyright 2024 ExpyDoc