バリア操作は、書き込みアクセス順番メモリーモデルに関する問題を解決するときに使用します。バリア操作は、リモートメモリーアクセスエラーを検出することもできます。
バリア初期化
バリアを開く
バリアを閉じる
書き込みの順番を決定する
閉じる操作を正常に実行することによって、バリアを開いてから閉じるまでの間に発生するアクセス操作が正常に完了することが保証されます。バリアを開いた後、個々のデータアクセス操作 (読み取りと書き込みの両方) が失敗しても、バリアを閉じるまでは報告されません。
バリアの有効範囲内で書き込みの順番を決定するには、明示的なバリア順番決定操作を使用します。バリア順番決定操作の前に発行された書き込み操作は、バリア順番決定操作後に発行された操作よりも前に完了します。あるバリアの有効範囲内の書き込み操作の順番は別のバリアの有効範囲を基準にして決定されます。
バリアの初期化
int rsm_memseg_import_init_barrier (rsm_memseg_import_handle_t im_memseg , rsm_barrier_type_t type, rsmapi_barrier_t *barrier);現在のところ、サポートされるタイプは RSM_BAR_DEFAULT だけです。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
バリアポインタが無効です。
メモリーが不足しています。
バリアを開く
int rsm_memseg_import_open_barrier (rsmapi_barrier_t *barrier);戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
バリアポインタが無効です。
バリアを閉じる
int rsm_memseg_import_close_barrier (rsmapi_barrier_t *barrier);この関数はバリアを閉じて、すべてのストアバッファーをフラッシュします。この関数は、rsm_memseg_import_close_barrier() の呼び出しが失敗した場合、最後の rsm_memseg_import_open_barrier 呼び出しまで、呼び出し元プロセスがすべてのリモートメモリー操作を再試行することを前提にして呼び出されます。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
バリアポインタが無効です。
バリアが初期化されていません。
バリアが開かれていません。
メモリーアクセスエラー
接続が中断されました。
バリアの順番決定
int rsm_memseg_import_order_barrier (rsmapi_barrier_t *barrier);この関数は、すべてのストアバッファーをフラッシュします。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
バリアポインタが無効です。
バリアが初期化されていません。
バリアが開かれていません。
メモリーアクセスエラー
接続が中断されました。
バリアの破壊
int rsm_memseg_import_destroy_barrier(rsmapi_barrier_t *barrier);この関数は、すべてのバリアリソースの割り当てを解除します。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
バリアポインタが無効です。
モードの設定
int rsm_memseg_import_set_mode (rsm_memseg_import_handle_t im_memseg, rsm_barrier_mode_t mode);この関数は、put ルーチンで利用できるオプションの明示的なバリアの有効範囲決定をサポートします。有効なバリアモードは、RSM_BARRIER_MODE_EXPLICIT と RSM_BARRIER_MODE_IMPLICIT の 2 つです。バリアモードのデフォルト値は RSM_BARRIER_MODE_IMPLICIT です。暗黙モードでは、put 操作ごとに暗黙的なバリアの開く操作と閉じる操作が適用されます。バリアモードを RSM_BARRIER_MODE_EXPLICIT に設定する前は、rsm_memseg_import_init_barrier ルーチンを使用して、インポートされたセグメント im_memseg 用のバリアを初期化する必要があります。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
モードの取得
int rsm_memseg_import_get_mode (rsm_memseg_import_handle_t im_memseg , rsm_barrier_mode_t *mode);この関数は、put ルーチンにおける現在のバリアの有効範囲決定のモード値を取得します。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。