1

プラットフォームで特定のデバイスのコンテキストを作成したいと考えています。しかし、私はエラーが発生しています。

コード:

import pyopencl as cl
platform = cl.get_platforms()
devices = platform[0].get_devices(cl.device_type.GPU)
ctx = cl.Context(devices[0])

私が得ているエラー:

Traceback (most recent call last):
  File "D:\Programming\Programs_OpenCL_Python\Matrix Multiplication\3\main3.py", line 16, in <module>
    ctx = cl.Context(devices[0])
AttributeError: 'Device' object has no attribute '__iter__'

以下を使用すると、プログラムはエラーや警告なしでコンパイルおよび実行されます。

ctx = cl.create_some_context()

ただし、この関数を使用してプログラムを実行するたびに、デバイス タイプを手動で選択する必要があります。次の環境変数を設定できます

PYOPENCL_CTX='0'

これを使用すると、要件に基づいて利用可能なさまざまなデバイスのコンテキストを作成できなくなります。作成するすべてのコンテキストで、デフォルトでデバイス 0 に設定されます。

誰かがこの問題を手伝ってくれませんか。

ありがとうございました

4

1 に答える 1

7

PyOpenCLのドキュメントによると、Contextは特定のデバイスではなく、デバイスのリストを取得します。

コンテキスト作成コードを次のように変更した場合:

platform = cl.get_platforms()
my_gpu_devices = platform[0].get_devices(device_type=cl.device_type.GPU)
ctx = cl.Context(devices=my_gpu_devices)

動作するはずです。選択を本当に1つのデバイスのみに制限したい場合はmy_gpu_devices、たとえば次のようにリストを操作できます。

my_gpu_devices = [platform[0].get_devices(device_type=cl.device_type.GPU)[0]]
于 2012-10-21T19:22:36.340 に答える