CPU(localhost
ホスト)と接続されているポータブルデバイス(USBのようなもの)にいくつかのスレッドを実行したい。さまざまなデバイスに並列スレッドを生成するにはどうすればよいですか?
私はOpenCLが並列化をサポートしていることは知っていますが、OpenCLを使用してポータブルデバイスに作業を配布するにはどうすればよいですか?
OpenCL以外でこれを行う他のアイデアも役に立ちます。
CPU(localhost
ホスト)と接続されているポータブルデバイス(USBのようなもの)にいくつかのスレッドを実行したい。さまざまなデバイスに並列スレッドを生成するにはどうすればよいですか?
私はOpenCLが並列化をサポートしていることは知っていますが、OpenCLを使用してポータブルデバイスに作業を配布するにはどうすればよいですか?
OpenCL以外でこれを行う他のアイデアも役に立ちます。
OpenCLタスクを実行する可能性のあるデバイスには、インストール可能なクライアントドライバが関連付けられている必要があります。インストール可能なクライアントドライバは、該当するコンピュータのOpenCLドライバによって取得できます。グラフィックスカードは、ドライバが最新のものであれば、有効なICDがあることがほぼ保証されており、多くのコンシューマレベルのCPUはドライバによって提供されるICDを持っています。
しかし、ネットワークデバイスやUSBデバイスのような他のデバイスは、異種コンピューティングシステムで使用するために特別に設計されていない限り、有効なICDを持つことがかなり少なくなります。 彼らは有効なICDを持っている場合は、それはそれにあなたが正常にOpenCLを使用したいのと同じ方法を使用して、実行時にそのプラットフォームを照会して、OpenCLのコンテキストを作成するときに使用するためにそれを選ぶの単なる問題です:
//C++ OpenCL API
cl::Platform target_platform;
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
for(cl::Platform & platform : platforms) {
std::string name = platform.getInfo<CL_PLATFORM_NAME>();
if(name == /*Whatever the Name of the platform is*/) {
target_platform = platform;
break;
}
}
std::vector<cl::Device> devices;
target_platform.getDevices(CL_DEVICE_TYPE_ALL, &devices);
cl::Device target_device;
for(cl::Device & device : devices) {
if(device.getInfo</*...*/>() == /*...*/) {//Whatever properties you need
target_device = device;
break;
}
}
「ポータブルデバイス」とはどういう意味ですか?これはどんなデバイスですか?それはOpenCLの実装を持っていますか? – pmdj
システム内のすべてのOpenCLプラットフォームと各プラットフォーム内のすべてのデバイスを列挙してから、使用するデバイスのカーネル(おそらく異なるバージョン)をコンパイルし、それらのデバイスに作業をキューイングします。プログラムは、ワークロードを使用するすべてのデバイスに分散させるためのロジックを明示的に実装する必要があります。 –