2012-03-27 5 views
0

私は、並列計算のための古典的な研究であるコアの数で実行時間スケールに240コアを持つ私のQuadro FX 5800を使ってスケーラビリティ解析をしようとしています。 コアの定義がこれにどのように適合しているのでしょうか? どうすれば別のコア設定(8,16,32,64,128,240コア)で実行することができますか? 私のテストケースは、単純な行列乗算です。GPUのスケーラビリティ解析

答えて

3

GPUのスケーラビリティは、CUDAコアで測定するのではなく、SM使用率で測定してください。 IPCはおそらく、SM利用の最良の単一尺度です。アルゴリズムを開発する際には、すべてのサイクルに十分な作業を分散させることができるように作業を分割したいので、ワープスケジューラには少なくとも1つのワープが発行され、命令されます。一般に、これは、命令およびメモリのレイテンシを隠し、実行パイプラインを満たすためにさまざまな命令タイプを提供するために、各SMに十分なワープを持たなければならないことを意味します。

CUDAコア(無意味)でスケーリングをテストする場合は、1ブロックあたり1,2,3、... 32のスレッドを含むスレッドブロックを起動できます。スレッドブロックごとにWARP_SIZE(= 32)スレッドを複数回起動すると、コアのサブセットのみが使用されます。これらは基本的に無駄な実行スロットです。

SMでスケーリングをテストする場合は、1つのスレッドブロックから1000sのスレッドブロックまでアルゴリズムをスケーリングできます。スケーリングを理解するために、起動時にスレッドごとに共有メモリを設定することにより、SMごとのスレッドブロックを人為的に制限することができます。

これらの方向のそれぞれを最適に拡大するために、行列の乗算を書き直すのは難しいでしょう。このプロジェクトを開始する前に、0-100000からの合計や複数のスレッドブロックにわたる階乗尺度の計算など、単純な並列計算をどのように分散するかを理解することをお勧めします。これらのアルゴリズムはほんの数行であり、起動設定(GridDim、BlockDim、SharedMemoryPerBlock)とカーネル1-2のパラメータを変更することで前述のスケーリングを試みることができます。CUDAプロファイラ、Visual Profiler、Parallel Nsight 、またはCUevents。

1

プログラミングモデルとしてCUDAまたはOpenCLを使用していると仮定します。利用率をMマルチプロセッサ(SM)の数に制限する簡単な方法の1つは、実行コンフィギュレーションをMブロック(スレッド)で起動することです。各SMがNコアで構成されている場合、このようにしてN、2N、4N、...コアのスケーラビリティをテストできます。

たとえば、GPUに4つのSMがある場合、各SMには32のコアがあります。 1、2、4ブロックのカーネルを実行することにより、カーネルは32,64、および128コアのGPUを利用します。

+0

ブロック数がコアに対応していますか? 私はそれが正しいとは思わない – Mohammed

+0

@ashwin:それは間違っています。問題のカードでは、Mブロックは1 M <= 30の場合は8Mコアで、M> 30の場合は240コアで実行されます。 – talonmies

+0

Talonmies:(A)1つのブロックがSMに制限されている(SMに分割できない)(B)4つのブロックと4つのSMがある場合、グローバルスケジューラはSMごとに1つのブロックを配置しますか? –

関連する問題