用語「スレッドの分岐」はCUDAで使用されています。私の理解から、別のスレッドを割り当てて別々のタスクを実行し、結果として大きなパフォーマンスが得られるという状況です。Openmpスレッドの分岐?
私はopenmpでこれを行うための同様のペナルティがあるのだろうかと疑問に思っていましたか?たとえば、6コアのプロセッサと6スレッドのプログラムがあるとします。 3つのスレッドが特定のタスクを実行し、他の3つのスレッドがまったく別のタスクを実行するような条件がある場合、パフォーマンスが大幅に低下しますか?私は本質的にMIMDを行うためにopenmpを使用していると思います。
基本的には、私はopenmpとCUDAを使ってプログラムを書いています。 2つのスレッドがCUDAカーネルを実行し、残りのスレッドがCのコードを実行するようにします。ありがとう。
ただ興味がありますが、OpenMPでこれをどうやって行うのでしょうか?私はあなたの質問が既に答えられていることを知っていますが、コードの一部を見てうれしいです。 –
これは話題にはなりませんが、ホストコードが過度に複雑になる前に、CUDAに複数のCPUスレッドを必要としないかもしれません - CUDA 4.0以降では、単一のホストスレッドからマルチGPUプログラミングを行うことができます。あなたはホスト側で行うべき並行作業がありますが、複数のスレッドは複雑さを追加することはできません。 CPUと並行して作業する場合は、CUDA用に1つのCPUスレッドを使用し、残りのCPUスレッドを並列に使用することができます。 – harrism