スレッドを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しなければ他スレッドとのコヒーレンシーは取れません。