一部のコードがCPUで実行され、一部のコードがGPUで実行されるプログラムを作成したいと思います。私はopenclを使いたいです。はいの場合、どうすればそれを行うことができますか?ビジュアルスタジオを使いたいです。
3 に答える
マイクロソフトがサポートしているAMPを試してみてください。
それは間違いなくできます。これは、CPU + GPU の組み合わせで大きなプログラムを作成する方法です。いくつかのループをアンロールするなど、コードの一部を並列化できると思われる場合、または切断されたデータ セットを操作している場合は、それらの項目を GPU に配置します。シーケンシャルで多くの同期が必要で、一部のループでビジー待機を行う場合は、CPU に配置します。
これを実現する方法は簡単です。最初にホスト部分にアルゴリズム/ロジックを記述し、次に OpenCL API 関数を使用して GPU をセットアップし、並列コードを実行します。GPU 計算ユニットで実行される関数はカーネルと呼ばれるため、 OpenCL (C99) 言語のカーネル関数。
Web には、これを達成するのに役立つ優れた指針があります。
AMD APP SDK 2.7 http://developer.amd.com/sdks/AMDAPPSDK/downloads/Pages/default.aspx 単純な hello world から簡単な方法で実装された複雑なアルゴリズムに至るまで、多くの OpenCL サンプルを使用できます。
AMD APP Profiler これは AMD APP SDK 2.7 に付属しており、作成した内容をプロファイリングするのに役立ちます
AMD gDEBugger http://developer.amd.com/tools/gDEBugger/Pages/default.aspx
これは、GPU での OpenCL プログラムのデバッグに役立ちます。ホスト コードのデバッグには、Visual Studio デバッガーを使用します。
Intel も同様のサンプルを提供しています: http://software.intel.com/en-us/articles/vcsource-samples/
Nvidia のサンプルはこちら: http://developer.download.nvidia.com/compute/cuda/3_0/sdk/website/OpenCL/website/samples.html
OpenCL では複数のデバイスを使用できます。指定された API を使用してデバイスに関する情報を取得し、ハンドルを使用して各デバイスにコンテキストを作成します。Rest は、単純な OpenCL プログラムと同じくらい簡単です。タスク並列カーネルを起動することもできます。詳細については、AMD/nVIDIA OpenCL プログラミング ガイドを参照してください。