いくつかのコードがCPUではなくGPUで実行されることがわかっている簡単な方法はありますか?コードがGPUまたはCPUを使用して実行されているかどうかはどのようにわかりますか?
答えて
あなたは、CPUとGPUの間の仕事の分離について、あなたのコンセプトを理解する必要があると思います。何かをコーディングしてGPU実行を対象としない通常のコンパイラでコンパイルすると、コードは常にCPUを実行します。
メインプログラム内のOpenGL関数またはDirectX関数への呼び出しはすべてCPU上で実行されますが、「魔法の」変換レイヤはありません。しかし、それらの呼び出しの中には、描画三角形のようにGPUに何かをさせるものがあります。
CUDAおよびOpenCLは、データ並列実行アーキテクチャを目的とした言語です。 GPUはそのようなアーキテクチャです。しかし、CUDAとOpenCLのコードでは、CPU上で実行されるいくつかのホストプログラムが必要です。プログラマブルシェーダ(HLSL、GLSL)も同様です。
So:プログラムのホスト部分(作業環境の設定、レンダリング呼び出しまたはGPU実行の実行)はCPU上で実行されます。 GPU上で実行されるコードは、別々のコンパイル単位(OpenGLにアップロードされたGLSLシェーダコード、OpenCL/CUDAコンパイラでコンパイルされたOpenCL/CUDAコード)でコンパイルされます。
glsl(.sh)のすべてのコードがGPUで動作していますか?ガウス/メジアンフィルタリングのようなもっと複雑な処理が必要な場合はどうすればよいですか?書く場合:float a = 0.5 * 0.7;これは何回ですか? 1ピクセルあたり1つ?私はちょうどそれがoneceを動かしてほしいと思うsomehingの平行していることおよびsomehingを制御することができますか?申し訳ありませんが、私は並列実行プログラミングには新しいです。 – flankechen
datenwolfによれば、標準コンパイラ(gccなど)でコンパイルされたコードはすべてCPU上で実行されます。 GPUで実行されるプログラムはシェーダと呼ばれます。シェーダの変数型はC/C++プログラムと異なり、構文もより厳しく制限されています。
古いグラフィックアプリケーションは、2種類のシェーダ(頂点とフラグメント)で動作します。頂点シェーダは、レンダラに送信されたジオメトリの任意の頂点で操作されました。フラグメントシェーダは頂点シェーダ(ジオメトリフェースにまたがって補間)からの出力を受け取り、スクリーンに描画されるジオメトリの各ピクセルまたはフラグメントで動作します。
現代のグラフィックはGeneral Purpose GPU Programmingのアイデアを導入しました。 OpenGLのジオメトリシェーダとNvidiaのCUDAは、GPU上で汎用プログラミングを実行できます。
要約すると、コンパイルされたシェーダはGPU上で実行され、コンパイルされたC/C++はCPU上で実行されます。
プレシェーダ時代はどうでしたか?GPU上でどのようなコードが実行されていましたか? –
プレシェーダ時代はGPU時代に先行していたため、GPUのユーザが書いたコードは実行されませんでした。 – kevintodisco
どのOSでOpenGL/OpenCL/otherを使用しているかによって、システムプロファイラを使用してこの情報を得ることができます。システムプロファイラは、システム全体の活動を追跡し、追跡が完了した後に読み取り可能な形式で提示するソフトウェアです。 たとえば、Windowsの場合、CPUとGPUの両方を監視するVtuneを使用できます。
これが役に立ちます。
- 1. テンソルフローはどこで実行されますか? CPUまたはGPU?コードで
- 2. Mock in Springブートが使用されているかどうかはどのようにわかりますか?
- 3. ブロックスケジューリングがGPUによって行われるかどうか?
- 4. ActiveMQがactivemq.xmlを使用しているかどうかはどのようにわかりますか?
- 5. 正しい.NETフレームワークがインストールされているかどうかはどのようにわかりますか?
- 6. Python:コードのCPU使用量はどのようにしてわかりますか?
- 7. CUDAを使用してGPU上でMATLABコードを実行するにはどうすればよいですか?
- 8. HTML5 RequestAnimationFrameはCPUまたはGPUで実行されますか?
- 9. コードがMono上で実行されているとはどうすればわかりますか?
- 10. Gensim Word2VecがCコンパイラを使用しているかどうかはどうすればわかりますか?
- 11. 2つのセルがマージされているかどうかはどのようにわかりますか?
- 12. Prepared Statementがキャッシュされているかどうかはどのようにわかりますか?
- 13. Javaでは、スレッドが実行されているかどうかをどのように判断しますか?
- 14. iPhone - プロトコルメソッドが実装されているかどうかはどのように分かりますか?
- 15. イベントオブジェクトはどうなりますか?コードを再実行していますか?
- 16. ローカルJavascriptコードはどのように実行されますか?
- 17. JRuby vs. Rubyのどちらから実行しているかはどうすればわかりますか?
- 18. サーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかをどのように知ることができますか?
- 19. コードがcPythonまたはJython上で実行されているかどうかを検出できますか?
- 20. ListView.DataSourceはどのように使用されていますか?
- 21. オクターブデバッガはどのように使用されていますか?
- 22. RedirectToRouteはどのように使用されていますか?
- 23. Matplotlib:どのカラーマップが使用されているかはどのように分かりますか?
- 24. Linuxシステムコールに関して実装されたプロセスのバックグランドはどのようにして行われますか?
- 25. URLの画像が変更されたかどうかはどのようにわかりますか?
- 26. ファンページが削除されたかどうかはどのようにわかりますか?
- 27. サブライムテキストでどのプロジェクトを使用しているのかはどうすればわかりますか?
- 28. スレッドが実行されているCPUを特定するにはどうすればよいですか?
- 29. どのようにフルスクリーンアプリケーションがウィンドウで実行されているかどうかを検出できますか?
- 30. Grand Central Dispatchを使用して、ブロックが既に実行されているかどうかを確認するにはどうすればよいですか?
これはあまり決定的ではありませんが、Windowsでは[Process Explorer](http://technet.microsoft.com/en-us/sysinternals/bb896653)にGPU使用グラフがあります。したがって、それを使用するか、それがどのAPIを使用しているかを調べてください。 – PeterT
GPUで実行しようとしている「コード」の種類について具体的に説明できますか?あなたは3つの異なるAPIをリストアップしています。これらのAPIはすべて、3つの全く異なる方法でGPU上で「コード」を実行します。 –