コレクタは、Message Passing Interface (MPI) ライブラリの呼び出しの際のデータを収集できます。
MPI トレースは、オープンソースの VampirTrace 5.5.3 リリースを使用して実装されます。これは次の VampirTrace 環境変数を認識します。
これらの変数については、Technische Universität Dresden Web サイトにある『Vampirtrace User Manual』を参照してください。
バッファーの制限に達したあとに発生する MPI イベントはトレースファイルに書き込まれないため、トレースが不完全になります。
この制限を撤廃してアプリケーションのトレースを完全なものにするには、VT_MAX_FLUSHES 環境変数を 0 に設定します。この設定を行うと、MPI API トレースコレクタは、バッファーがいっぱいになるたびにバッファーをディスクにフラッシュします。
バッファーのサイズを変更するには、VT_BUFFER_SIZE 環境変数を設定します。この変数の最適値は、トレース対象のアプリケーションによって異なります。小さな値を設定すると、アプリケーションに利用できるメモリーは増えますが、MPI API トレースコレクタによるバッファーのフラッシュが頻繁に行われるようになります。このようなバッファーのフラッシュによって、アプリケーションの動作が大幅に変化する可能性があります。その一方、大きな値 (2G など) を設定すると、MPI API トレースコントローラによるバッファーのフラッシュは最小限に抑えられますが、アプリケーションに使用できるメモリーは少なくなります。バッファーやアプリケーションデータを保持するために十分なメモリーを利用できない場合、アプリケーションの一部がディスクにスワップされて、アプリケーションの動作が大幅に変化する可能性があります。
MPI_Abort |
MPI_Accumulate |
MPI_Address |
MPI_Allgather |
MPI_Allgatherv |
MPI_Allreduce |
MPI_Alltoall |
MPI_Alltoallv |
MPI_Alltoallw |
MPI_Attr_delete |
MPI_Attr_get |
MPI_Attr_put |
MPI_Barrier |
MPI_Bcast |
MPI_Bsend |
MPI_Bsend-init |
MPI_Buffer_attach |
MPI_Buffer_detach |
MPI_Cancel |
MPI_Cart_coords |
MPI_Cart_create |
MPI_Cart_get |
MPI_Cart_map |
MPI_Cart_rank |
MPI_Cart_shift |
MPI_Cart_sub |
MPI_Cartdim_get |
MPI_Comm_compare |
MPI_Comm_create |
MPI_Comm_dup |
MPI_Comm_free |
MPI_Comm_group |
MPI_Comm_rank |
MPI_Comm_remote_group |
MPI_Comm_remote_size |
MPI_Comm_size |
MPI_Comm_split |
MPI_Comm_test_inter |
MPI_Dims_create |
MPI_Errhandler_create |
MPI_Errhandler_free |
MPI_Errhandler_get |
MPI_Errhandler_set |
MPI_Error_class |
MPI_Error_string |
MPI_File_close |
MPI_File_delete |
MPI_File_get_amode |
MPI_File_get_atomicity |
MPI_File_get_byte_offset |
MPI_File_get_group |
MPI_File_get_info |
MPI_File_get_position |
MPI_File_get_position_shared |
MPI_File_get_size |
MPI_File_get_type_extent |
MPI_File_get_view |
MPI_File_iread |
MPI_File_iread_at |
MPI_File_iread_shared |
MPI_File_iwrite |
MPI_File_iwrite_at |
MPI_File_iwrite_shared |
MPI_File_open |
MPI_File_preallocate |
MPI_File_read |
MPI_File_read_all |
MPI_File_read_all_begin |
MPI_File_read_all_end |
MPI_File_read_at |
MPI_File_read_at_all |
MPI_File_read_at_all_begin |
MPI_File_read_at_all_end |
MPI_File_read_ordered |
MPI_File_read_ordered_begin |
MPI_File_read_ordered_end |
MPI_File_read_shared |
MPI_File_seek |
MPI_File_seek_shared |
MPI_File_set_atomicity |
MPI_File_set_info |
MPI_File_set_size |
MPI_File_set_view |
MPI_File_sync |
MPI_File_write |
MPI_File_write_all |
MPI_File_write_all_begin |
MPI_File_write_all_end |
MPI_File_write_at |
MPI_File_write_at_all |
MPI_File_write_at_all_begin |
MPI_File_write_at_all_end |
MPI_File_write_ordered |
MPI_File_write_ordered_begin |
MPI_File_write_ordered_end |
MPI_File_write_shared |
MPI_Finalize |
MPI_Gather |
MPI_Gatherv |
MPI_Get |
MPI_Get_count |
MPI_Get_elements |
MPI_Get_processor_name |
MPI_Get_version |
MPI_Graph_create |
MPI_Graph_get |
MPI_Graph_map |
MPI_Graph_neighbors |
MPI_Graph_neighbors_count |
MPI_Graphdims_get |
MPI_Group_compare |
MPI_Group_difference |
MPI_Group_excl |
MPI_Group_free |
MPI_Group_incl |
MPI_Group_intersection |
MPI_Group_rank |
MPI_Group_size |
MPI_Group_translate_ranks |
MPI_Group_union |
MPI_Ibsend |
MPI_Init |
MPI_Init_thread |
MPI_Intercomm_create |
MPI_Intercomm_merge |
MPI_Irecv |
MPI_Irsend |
MPI_Isend |
MPI_Issend |
MPI_Keyval_create |
MPI_Keyval_free |
MPI_Op_create |
MPI_Op_free |
MPI_Pack |
MPI_Pack_size |
MPI_Probe |
MPI_Put |
MPI_Recv |
MPI_Recv_init |
MPI_Reduce |
MPI_Reduce_scatter |
MPI_Request_free |
MPI_Rsend |
MPI_rsend_init |
MPI_Scan |
MPI_Scatter |
MPI_Scatterv |
MPI_Send |
MPI_Send_init |
MPI_Sendrecv |
MPI_Sendrecv_replace |
MPI_Ssend |
MPI_Ssend_init |
MPI_Start |
MPI_Startall |
MPI_Test |
MPI_Test_cancelled |
MPI_Testall |
MPI_Testany |
MPI_Testsome |
MPI_Topo_test |
MPI_Type_commit |
MPI_Type_contiguous |
MPI_Type_extent |
MPI_Type_free |
MPI_Type_hindexed |
MPI_Type_hvector |
MPI_Type_indexed |
MPI_Type_lb |
MPI_Type_size |
MPI_Type_struct |
MPI_Type_ub |
MPI_Type_vector |
MPI_Unpack |
MPI_Wait |
MPI_Waitall |
MPI_Waitany |
MPI_Waitsome |
MPI_Win_complete |
MPI_Win_create |
MPI_Win_fence |
MPI_Win_free |
MPI_Win_lock |
MPI_Win_post |
MPI_Win_start |
MPI_Win_test |
MPI_Win_unlock |
表 2–4 MPI トレースメトリックス
メトリック |
定義 |
---|---|
MPI 送信数 |
開始された MPI ポイントツーポイント送信数 |
MPI 送信バイト数 |
MPI で送信されるバイト数 |
MPI 受信数 |
完了した MPI ポイントツーポイント受信数 |
MPI 受信バイト数 |
MPI で受信されるバイト数 |
MPI 時間 |
MPI 関数へのすべての呼び出しにかかった時間 |
そのほかの MPI イベント |
2 点間のメッセージの送受信を行わない MPI 関数の呼び出しの数 |
MPI 時間は MPI 関数でかかった LWP 時間の合計です。MPI 状態の時間も収集される場合、MPI_Init および MPI_Finalize 以外のすべての MPI 関数については、MPI 作業時間と MPI 待機時間の合計が MPI 作業時間にほぼ等しくなるはずです。Linux では、MPI 待機および MPI 作業はユーザー CPU 時間とシステム CPU 時間の合計に基づきますが、MPI 時間は実際の時間に基づくため、数値は一致しません。
MPI のバイトおよびメッセージのカウントは、現在のところ 2 点間のメッセージについてのみ収集され、集合的な通信機能に関しては記録されません。MPI 受信バイト数は、すべてのメッセージで実際に受信したバイト数をカウントします。MPI 送信バイト数は、すべてのメッセージで実際に送信したバイト数をカウントします。MPI 送信数は送信したメッセージの数をカウントし、MPI 受信数は受信したメッセージの数をカウントします。
MPI トレースデータの収集は、MPI 呼び出しが原因となる可能性のある、MPI プログラム内のパフォーマンスの問題を抱えている場所を特定する上で役立ちます。パフォーマンスの問題となる可能性のある例としては、負荷分散、同期遅延、および通信のボトルネックがあります。