回答:
それがその要点です。
原則として、プラットフォームは、おそらく、必要なことを何でも行うことができます。たとえば、x86からGPUコードへのコンパイルされたコードのジャストインタイム変換を行う高度なオペレーティングシステムを想像できます。同様に、OpenGLドライバーはホストCPUで何でも実行できます。
しかし、実際にあなたが今説明したのは、何が起こるかです。
通常、はい。Javaは、CPUで実行されるプログラムを作成するために使用されます。シェーダー言語(cg、hlslなど)は、gpuで実行されるプログラムを作成するために使用されます。
ルールの例外は、ギャップを埋めることができるサードパーティのAPIを使用することです。
david van brinkは一般的にあなたの質問に答えました。
しかし、彼が言うように、OpenGLドライバーはCPU上で何かを実行でき、実際に多くのことが起こります。特に互換性コンテキストでは、グラフィックカードにいくつかの奇妙なレガシー機能を実装できません。ソフトウェアエミュレーションが必要です。たとえば、CPUで点描が実行される前に聞いたことがあります。ピッキングには驚きも期待できます。
これらの驚きは、Appleがハードウェアの範囲全体でOpenGLのビューを非常によく統一しており、一部の小さなハードウェアにはエミュレートする必要のあるものがないため、2.1コンテキストを使用するMacOSでさらに発生します。コンテキスト作成コードがソフトウェアデバイスを明示的に指定している場合、CPUでENTIRE OpenGL 2.1仕様を完全に実行できるようになります。
逆に、vexclやboost computeなどのコンピューティングライブラリ、またはMicrosoftのAMP、nVidiaスラストなどのコンピューティングライブラリを介して実行されるコードは、APIセットアップフラグに応じてGPUまたはCPUで実行できます。
最後に、CPU内にはDSPアーキテクチャもあり、その一部はSIMDと呼ばれています。インテルのispcコンパイラーは、コンパイル時に多くのパフォーマンス診断を使用してSIMDレーンで実行できるように「保証」されたコードを生成し、最大限に活用できるようにします。それにOpenMPを追加すると、マルチスレッドSIMDを取得できます。これはGPUの概念に近づきます。ハイエンドのCPUとローエンドのGPUを使用している場合、これは実際にパフォーマンスが向上します。
http://ispc.github.io/