9

KhronosのOpenCL1.0および1.1仕様におけるプラットフォームの定義:

プラットフォーム:ホストと、OpenCLフレームワークによって管理されるデバイスのコレクション。これにより、アプリケーションは、プラットフォーム内のデバイスでリソースを共有し、カーネルを実行できます。

OpenCL関数clGetPlatformIDsは、プラットフォームの配列を作成します。これは、複数のプラットフォームが可能であることを意味します。特定のOpenCLホストにプラットフォームが1つしかないことを想定しても安全ですか?

言い換えれば、これを行うことによって、どのホストでも何かを失うことになりますか?

cl_platform_id platform_id;
cl_uint num_platforms;
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
4

4 に答える 4

10

プラットフォームが1つしかないことに依存しません。1つのシステムに複数のOpenCL実装がある場合(OpenCL ICDで可能になるはずですが、それが計画されているだけなのか、すでに完了しているのかはわかりません)、opencl実装ごとに1つずつ、複数のプラットフォームを取得する必要があります。複数のopencl実装が存在する可能性がある1つの例は、gpuでopenclを実行するnvidia実装と、cpuで実行するamd実装であり、どちらもそれほどフェッチされません。

編集:これの(より良い)説明については、http : //developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71を参照してください。

于 2010-08-26T02:45:59.573 に答える
8

ティムチャイルドの答えを例で補足するには(AMDとIntelSDKの両方がインストールされたThinkpadX201):

$ python /usr/share/doc/python-pyopencl/examples/benchmark-all.py
Execution time of test without OpenCL:  10.9563219547 s
===============================================================
Platform name: AMD Accelerated Parallel Processing
Platform profile: FULL_PROFILE
Platform vendor: Advanced Micro Devices, Inc.
Platform version: OpenCL 1.1 AMD-APP-SDK-v2.5 (684.213)
---------------------------------------------------------------
Device name: Intel(R) Core(TM) i5 CPU       M 520  @ 2.40GHz
Device type: CPU
Device memory:  7799 MB
Device max clock speed: 2399 MHz
Device compute units: 2
Execution time of test: 0.00842799 s
Results OK
===============================================================
Platform name: Intel(R) OpenCL
Platform profile: FULL_PROFILE
Platform vendor: Intel(R) Corporation
Platform version: OpenCL 1.1 LINUX
---------------------------------------------------------------
Device name: Intel(R) Core(TM) i5 CPU       M 520  @ 2.40GHz
Device type: CPU
Device memory:  7799 MB
Device max clock speed: 2400 MHz
Device compute units: 2
Execution time of test: 0.00260659 s
Results OK
于 2012-01-17T21:37:13.330 に答える
3

はい、ベンダーのOpenCLインストールごとに1つのプラットフォームIDがあります。したがって、AMDとIntelのOpenCL SDKをインストールすると、それぞれに1つのプラットフォームIDが取得されます。

于 2011-07-28T18:09:32.087 に答える
0

ホストにプラットフォームが1つしかない場合でも、 clGetPlatformInfoを呼び出す前に、そのプラットフォームのIDを把握する必要があります。したがって、clGetPlatformIDsを呼び出し、デフォルトまたはユーザー提供のプラットフォームを選択してから、clGetPlatformInfoを呼び出すとよいでしょう。

于 2010-08-10T12:30:17.973 に答える