私は、ヘテロジニアスコンピューティングの可能性の理論的な割り当てを書いています。CPUまたはGPUのいずれかでシリアル方式で実行されるシングルスレッド(並列化不可)の有効性を比較する必要があります。
GPUでシングルスレッドを実行するのは意味がないので、奇妙な質問だと思いますが、開発中のヒューリスティックにはガイドラインの比率を実際に使用できます。
簡単にテストできることは知っていますが、CUDAもOpenCLも実際の経験がなく、急いでいます。
私は、ヘテロジニアスコンピューティングの可能性の理論的な割り当てを書いています。CPUまたはGPUのいずれかでシリアル方式で実行されるシングルスレッド(並列化不可)の有効性を比較する必要があります。
GPUでシングルスレッドを実行するのは意味がないので、奇妙な質問だと思いますが、開発中のヒューリスティックにはガイドラインの比率を実際に使用できます。
簡単にテストできることは知っていますが、CUDAもOpenCLも実際の経験がなく、急いでいます。
GPU実行ユニットは順番に並んでいる傾向があり、(少なくともnVidia GPUの場合)通常、シングルスレッドコンテキストでは4クロックごとに1つの命令しか取得できません。これを最新のスーパースカラーCPUと比較してください。通常、1クロックあたり1命令を超えるスループットが得られ、CPUはクロックごとに4倍以上勝ちます。ただし、CPUクロック周波数はGPUクロックよりもはるかに高い傾向があるため、クロック速度からさらに3倍になる可能性があり、CPUはGPUに対して最大12倍以上になります。
単一の GPU コアは、CPU よりもはるかに弱く、さらにデータ転送のオーバーヘッドがあります。GPU が並列コードで勝つ理由は、数百のコアで同時に実行されるスレッドの数が非常に多いためです。次の例を検討してください。
for(int i=0; i<1000; i++)
a[i]= /*some value*/
1 つのスレッドのみを使用する場合、1000 回反復する必要があります。CPUは間違いなくGPUよりも非常に高速です。しかし、GPU を利用するために、1000 個のスレッドを作成し、それぞれがメモリ「a」の対応する位置に値を挿入します。これにより、CPU よりもパフォーマンスが向上する可能性があります。
NVidia Tesla GPU は、一部の操作を 4ops/クロックで実行します。
一般に、GPU のメモリ帯域幅は CPU<-> メイン RAM よりも高速であり、2D 構造用の巧妙なキャッシュ機能がいくつかあります。
しかし、一般的にはいいえ - 256 個以上のアイテムに対して同じことをする必要がない場合は、CPU を使用します
また、GPU が動作するクロック レート (1 ~ 2 GHz) も考慮する必要があります。これは、CPU のクロック レートと比較して非常に低いです。コードが並列でない場合、GPU のパフォーマンスは選択の余地がありません。