1

GPUデバイスに2つのキューを作成し、カーネルを並行して実行したい.これは、異なるキューのカーネル間にイベントを設定する必要はありませんが、同じキューのカーネルを順番に実行する必要があります.さらに、2つ作成しましたCPU スレッド、各 CPU スレッドは 1 つのキューを制御し、CPU スレッドは並列に実行されます。現在、異なるキュー間のカーネルは並列に実行されていないようです。誰かアドバイスをいただけますか?

ご回答ありがとうございます。私のプラットフォームに関する情報を以下に示します。ここに画像の説明を入力

ドライバーに関する情報ここに画像の説明を入力

OS:Centos 5.X

4

2 に答える 2

2

ほとんどの GPU は、複数のカーネルを同時に実行することができません。これは単なるハードウェアの制限であり、ソフトウェアの問題ではありません。複数のカーネルを並行して実行できますが、複数の GPU (つまり、複数の OpenCL デバイス) で実行できます。

とにかく、シナリオでは、多くの GPU がメモリ転送 (CPU <=> GPU) とカーネル実行をオーバーラップできます。これは OpenCL ドライバー次第ですが、AMD ドライバーが 1 つのキューからのメモリ転送と別のキューからのカーネル実行をオーバーラップするのを見てきました。

于 2013-07-08T19:26:44.270 に答える
1

カーネルを一度に 1 つずつ実行させる計算ユニットがデバイス上に 1 つだけ存在する場合があります。その場合、「並列」実行を可能にするために、ホスト アプリケーションによってカーネルを分割し、交互にキューに入れる必要がある場合があります。計算ユニットの数は、clGetDeviceInfoforCL_DEVICE_MAX_COMPUTE_UNITSパラメータによって返されます。

複数の計算ユニットがある場合、デバイス パラメータの値が 1 より大きい場合、デバイスはパーティショニングをサポートする場合があります。この場合、別のコマンドCL_DEVICE_PARTITION_MAX_SUB_DEVICESを使用して、デバイスをいくつかのサブデバイス (たとえば 2 つ) に「分割」できます。clCreateSubDevicesキュー。各サブデバイスは、他のサブデバイスとは独立して (かつ並行して) カーネルを実行します。

より最適な負荷が必要な場合は、サブデバイスの不均衡な負荷にホスト アプリケーションで対処する必要があることに注意してください。

于 2013-07-09T22:31:30.090 に答える