MPIサブルーチン概要
ここで説明されているサブルーチンは例題で使用したものだけで、全てを網羅
しているわけではありせん。
- mpi_address(location,address,ierr)
- [void*], intent(in) :: location : データの位置 (データ型は問わない)
- integer, intent(out) :: address : バイトアドレス
- integer, intent(out) :: ierr : エラーコード
locationのバイトアドレスを取得します。
- mpi_bcast(buf,count,datatype,root,comm,ierr)
- datatype, intent(inout) :: buf : 送受信されるデータの先頭位置
- integer, intent(in) :: count : 送受信されるデータの数
- integer, intent(in) :: datatype : 送受信されるデータのデータ型
- integer, intent(in) :: root : データを送信するプロセッサのランク
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: ierr : エラーコード
rootプロセッサがbufをコミュニケータで定義された全てのプロセッサに送信し、コミュニケータ内の他の全てのプロセッサはデータをbufに受け取ります。
- mpi_comm_rank(comm,rank,ierr)
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: rank : プロセッサランク
- integer, intent(out) :: ierr : エラーコード
プロセッサランクを取得します。
- mpi_comm_size(comm,size,ierr)
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: size : プロセッサ数
- integer, intent(out) :: ierr : エラーコード
コミュニケータ内のプロセッサの数を取得します。
- mpi_finalize(ierr)
- integer, intent(out) :: ierr : エラーコード
MPIを終了します。全てのMPIサブルーチンはこのサブルーチンの前でコールしなければなりません。
- mpi_gather(sendbuf,sendcounts,sendtype,recvbuf,recvcounts,recvtype,root,comm,ierr)
- sendtype, intent(in) :: sendbuf : 各プロセッサから送信されるデータの位置
- integer, intent(in) :: sendcounts : 各プロセッサから送信されるデータの数
- integer, intent(in) :: sendtype : 各プロセッサから送信されるデータのデータ型
- recvtype, intent(out) :: recvbuf : rootプロセッサが受信するデータの先頭位置
- integer, intent(in) :: recvcounts : rootプロセッサが各プロセッサから受信するデータの数
- integer, intent(in) :: recvtype : rootプロセッサが受信するデータのデータ型
- integer, intent(in) :: root : データを集めるプロセッサのランク
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: ierr : エラーコード
各プロセッサから送信されたデータをrootプロセッサに集めます。Ip番プロセッサから送信されたデータは、(Ip-1))番プロセッサからのデータが保存された位置の隣に保存されます。Sendcounts/sendtypeとrecvcounts/recvtypeは全プロセッサで同じでなければなりません。
- mpi_init(ierr)
- integer, intent(out) :: ierr : エラーコード
MPIを初期化します。全てのMPIサブルーチンはこのサブルーチンの後でコールしなければなりません。
- mpi_irecv(buf,count,datatype,source,tag,comm,request,ierr)
- datatype, intent(out) :: buf : 受信するデータの先頭位置
- integer, intent(in) :: count : 受信するデータの数
- integer, intent(in) :: datatype : 受信するデータのデータ型
- integer, intent(in) :: source : データ送信元のプロセッサランク
- integer, intent(in) :: tag : メッセージタグ
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: request : mpi_waitで使用するリクエストタグ
- integer, intent(out) :: ierr : エラーコード
非ブロッキング版mpi_recv。受信したデータの情報[status(mpi_status_size)]は対応するmpi_waitが、受信完了を確認した時点で、受け取ります。
- mpi_isend(buf,count,datatype,dest,tag,comm,request,ierr)
- datatype, intent(in) :: buf : 送信するデータの先頭位置
- integer, intent(in) :: count : 送信するデータの数
- integer, intent(in) :: datatype : 送信するデータのデータ型
- integer, intent(in) :: dest : データ送信先のプロセッサランク
- integer, intent(in) :: tag : メッセージタグ
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: request : mpi_waitで使用するリクエストタグ
- integer, intent(out) :: ierr : エラーコード
非ブロッキング版mpi_send。
- mpi_recv(buf,count,datatype,source,tag,comm,status,ierr)
- datatype, intent(out) :: buf : 受信するデータの先頭位置
- integer, intent(in) :: count : 受信するデータの数
- integer, intent(in) :: datatype : 受信するデータのデータ型
- integer, intent(in) :: source : データ送信元のプロセッサのランク
- integer, intent(in) :: tag : メッセージタグ
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: status(mpi_status_size) : 受信したデータの情報
- integer, intent(out) :: ierr : エラーコード
sourceプロセッサから送られたデータをbufに受信します。対応するmpi_sendはmpi_recvと同じtagを持たなければなりません。status(mpi_status_size)には、送信元のプロセッサランク、メッセージタグ、エラーコードなど、受信したデータの情報が記録されます。
- mpi_reduce(operand,result,count,datatype,operator,root,comm,ierr)
- datatype, intent(in) :: operand : 演算を施すデータ
- datatype, intent(out) :: result : 演算結果
- integer, intent(in) :: count : operand/resultの数
- integer, intent(in) :: datatype : operand/resultのデータ型
- integer, intent(in) :: operator : リダクション演算
- integer, intent(in) :: root : 結果を受信するプロセッサのランク
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: ierr : エラーコード
各プロセッサが保持するoperandにoperatorを作用させます。operatorにはMPIライブラリで定義されているリダクション演算(mpi_sum, mpi_max, mpi_min など)、またはユーザが定義した演算を与えます。
- mpi_send(buf,count,datatype,dest,tag,comm,ierr)
- datatype, intent(in) :: buf : 送信するデータの先頭位置
- integer, intent(in) :: count : 送信するデータの数
- integer, intent(in) :: datatype : 送信するデータのデータ型
- integer, intent(in) :: dest : データ送信先のプロセッサランク
- integer, intent(in) :: tag : メッセージタグ
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: ierr : エラーコード
destプロセッサへbufを送信します。対応するmpi_recvはmpi_sendと同じtagを持たなければなりませ
ん。
- mpi_sendrecv(sendbuf,sendcount,sendtype,dest,sendtag,recvbuf,recvcount,recvtype,souce,recvtag,comm,status,ierr)
- sendtype, intent(in) :: sendbuf : 送信するデータの先頭位置
- integer, intent(in) :: sendcount : 送信するデータの数
- integer, intent(in) :: sendtype : 送信するデータのデータ型
- integer, intent(in) :: dest : データ送信先のプロセッサランク
- integer, intent(in) :: sendtag : メッセージタグ
- recvtype, intent(out) :: recvbuf : 受信するデータの先頭位置
- integer, intent(in) :: recvcount : 受信するデータの数
- integer, intent(in) :: recvdatatype : 受信するデータのデータ型
- integer, intent(in) :: source : データ送信元のプロセッサランク
- integer, intent(in) :: recvtag : メッセージタグ
- integer, intent(in) :: comm : コミュニケータ
- integer, intent(out) :: status(mpi_status_size) : 受信したデータの情報
- integer, intent(out) :: ierr : エラーコード
mpi_sendとmpi_recvの組合せです。
- mpi_type_commit(newtype,ierr)
- integer, intent(in) :: newtype : 通知される派生型
- integer, intent(out) :: ierr : エラーコード
newtypeをMPIに通知します。通知後に新しい派生型newtypeが使用可能になります。
- mpi_type_struct((count,sizes,displacements,types,newtype,ierr)
- integer, intent(in) :: count : 派生型の要素数
- integer, intent(in) :: sizes(count) : 派生型の各要素の数
- integer, intent(in) :: displacements(count) : 派生型の各要素の先頭位置からの変位
- integer, intent(in) :: types(count) : 派生型の各要素のデータ型
- integer, intent(out) :: newtype : 派生型
- integer, intent(out) :: ierr : エラーコード
count, sizes, displacements, typesで定義されたデータグループを与える派生型を構築します。
- mpi_wait(request,status,ierr)
- integer, intent(inout) :: リクエストタグ
- integer, intent(out) :: status(mpi_status_size) : 対応する非ブロッキングサブルーチンが受信したデータの情報
- integer, intent(out) :: ierr : エラーコード
同じリクエストタグを持つ対応する非ブロッキングサブルーチンが終了するのを待ちます。
Written by "Ryusuke NUMATA" <rnumata at umd.edu>
http://www.glue.umd.edu/~rnumata/
Last modified: $Date: 2008-01-23 16:15:00 -0500 (Wed, 23 Jan 2008)$