0

私はOpenCLを初めて使用します。たとえば、私のGPUアーキテクチャが次のようになっていると仮定します。

マルチプロセッサの数:14

ワープサイズ:32

今、私はタスクの並列処理をしたいと思います。私は14のストリーミングマルチプロセッサを持っています

1)14の異なるタスクを同時に実行できますか?

2)もしそうなら、どうすればいいですか?

3)グローバルID、グループID、ローカルIDおよびすべてに言及する方法。

例を挙げて明確に説明します(スレッド数もあります)

前もって感謝します..:)

4

1 に答える 1

0

GPUはCPUとは異なります。CPUは「タスク並列」モードで動作できますが、これはコアごとに異なるコードを実行できることを意味します。ただし、GPUは「データ並列」であり、SIMT(単一命令複数スレッド)です。

つまり、一度に実行できるカーネルは1つだけですが、そのカーネルはすべてのコアで実行され、各コアはデータのスライスで同時に動作します。

この質問とその受け入れられた回答には、SIMTを説明するさらに多くの情報があり、ここでは複製しない有用な情報がたくさんあります。

GPUでタスクの並列処理を行う唯一の方法は、実際に複数のGPU/デバイスを使用することです。

技術的には、OpenCL APIは、 clCreateCommandQueueCL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLEを使用してコマンドキューを作成するときに使用して、一度に複数のカーネルを実行することをサポートします。ただし、このモードでは、カーネルが同時に実行される保証はありません。すべてのGPU OpenCL実装は、各カーネルを1つずつ実行するだけだと思います。CPUベースのOpenCL実装を使用する場合、これは当てはまらない可能性があり、カーネルが同時に実行される可能性があります(私はこれを自分で試していません)。

于 2013-02-14T23:43:21.170 に答える