1スレッドだけ動作させるコードを作成する際の諸注意

スレッドを1つだけ動作させる場合、OpenCLやCUDA等と同様に
特定のスレッドIDを持つもののみを動作させる、という手法で行います。

int pid = get_pid();
int tid = get_tid();
int gid = pid * get_maxtid() + tid;

if(gid == 0) {
    処理
}

// if内でグローバルメモリ上の変数を書き換えた場合
// flushしてあげないと変更が他スレッドに反映されない
flush();

 

という実装だと、gid(グローバルID)が0のスレッドのみが、ifブロック内を実行します。

注意点として、ifブロック内部で0スレッド目がグローバルメモリ上の変数を書き換えた場合、flushしなければ他スレッドとのコヒーレンシーは取れません。

カテゴリー: Tips

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です