2011-06-21 7 views
7

私はOpenCLを使用しており、ATI 4850カードを持っています。それはありますGPUデバイスで同時に実行できるタスクの数はいくつですか?

  • CL_DEVICE_MAX_COMPUTE_UNITS:10
  • CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:3
  • CL_DEVICE_MAX_WORK_GROUP_SIZE:256
  • CL_DEVICE_MAX_WORK_ITEM_SIZES:(256、256、256)
  • CL_DEVICE_AVAILABLE:1
  • CL_DEVICE_NAME:ATI RV770を

何ta sksは同時に実行できますか?

CL_DEVICE_MAX_COMPUTE_UNITS * CL_DEVICE_MAX_WORK_ITEM_SIZES = 2560ですか?

具体的には、1つのコアプロセッサで1つのタスクしか実行できません。デュアルコアは2つのタスクを実行できます... 1つの時点でGPUを実行できるタスクはいくつありますか?言い換えれば、GPUにはいくつのプロセッサが搭載されていますか?

+0

どういう意味ですか?一度に実行できるカーネルの数、またはGPU上で実行できるスレッドの数はいくつですか? –

+0

おそらくカーネルです。私は仕様を見て、それは "処理要素"と呼ばれています。だから問題は言い換えることができます: "GPUにはいくつの処理要素がありますか?" – Dmitriy

+0

そう簡単には分かりません。 GPUには、多数のスレッド(「ワープ」または「波面」)を同時に並列に実行する複数の計算ユニットがあります。 nVidiaの場合、これは現在32で、ATI 64の場合です。ワープサイズに関連するCLキャップがあるかどうかはわかりません。さらに、各ユニットは、ワープが何らかの理由でブロックされたときに、ハードウェアスケジューリングされる計算ユニットごとの未知数(あるドキュメントでは、nVidiaは1024ということもあります)を飛行スレッドとして持つことができます。同様の数値を仮定すると、GPUには320,000スレッドに近いものになります。 – Damon

答えて

6

RV770には10個のSIMDコアがあり、それぞれ16個のシェーダコアで構成され、それぞれ5個のALU(VLIW5アーキテクチャ)で構成されています。並列計算を行うことができる合計で800個のALU。私はOpenCLからこれらの数字をすべて取得する方法はないと思います。私はあなたがCPUコアと同等であるかどうかも分かりません。おそらくシェーダコアですか? VLIW at Wikipediaについて読むことができます。それは面白いデザインです。

複数のALUが並行しているにもかかわらず、CPUコアが1つの「タスク」しか実行していないとすれば、RV770は160のタスクを処理していると言えるでしょう。しかし、異なるチップの仕組みの違いによって、「コア」と「タスク」を定義するのが難しくなると思います。ハイパースレッドを持つCPUは、同時に2組のコードを実行することさえできます。 OpenCLでは、最近のドライバのアップデートで変更されていない限り、いつでも複数のカーネルを実行することはできません。

とにかく、私は、あなたの仕事を最高のパフォーマンスを与える方法でGPUに提示することが重要だと思います。残念ながら、実験以外のベストワークグループのサイズを見つける方法はありません。少なくとも私が知っているものではない。ドライバがOpenCL 1.1をサポートしている場合は、CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLEを照会し、作業サイズをその倍数に設定することができます。さもなければ、64の倍数のために行くことはおそらく安全な賭けです。

+1

私は、命令のフェッチとデコードを行うSIMDコア(**単一命令**、複数データ)シェーダーへの指示。したがって、16のシェーダコアはすべて特定の時間に同じコードを実行する必要があります。その結果、RV770は160個ではなく10個のタスクでのみ動作することになります。 –

1

GPUの作業が波面/ワープになります。

UIと計算にGPUを使用すると、それを意識することなく多くのプログラムで効果的に使用できます。 GUI描画の多くに加えて、あなたが実行している計算カーネルもあります。高速OpenCLクライアントは非同期であり、複数の作業インスタンスをオーバーラップさせるため、遅延に拘束されません。並行して複数のカーネルを使用することが期待されます。

使用できるバッファの数を制限するメモリ以外の「ハード」制限はないようです。 UIと計算に同じGPUを使用する場合は、作業を抑える必要があります。私の経験では、あまりにも多くの作業を行うと、GUIや計算カーネルが枯渇することになります。あなたが飢餓状態にならないようにする方法はありません(作業項目が実際に実行されるまでには長い時間がかかります)。一部の作業項目は、GPUが他の作業項目を実行している間に非常に長い時間(10秒以上が間違っている)で座ることがあります。私は、データの可用性に基づいてアイテムがパイプラインに送られ、作業アイテムの飢餓を防ぐことはほとんどまたはまったくないと推測しています。

どのくらい先に作業がエンキューされるかを制限することで、GPUの作業キューをほぼ/時には空にすることで、GUI応答性を大幅に向上させ、GUI描画作業飢餓の遅延を軽減します。

関連する問題