wiki:CALによるGPUプログラミング

Version 35 (modified by nakasato, 16 years ago) (diff)

--

基本情報

RV770の基本

  • RV770のGPUチップは、Radeon HD4850, HD4870, HD4890として売られているボードに搭載されている。
  • 正確にはアーキテクチャの名前はR700。4XXXの型番のものがいろいろあるが、規模に応じて演算器の個数が異なる。
  • 性能まとめ表
board arch clock memory SPの数 単精度性能 倍精度加算性能 倍精度乗算性能
HD4850 RV770 625 MHz DDR3 800 1040 GFLOPS 208 GFLOPS 104 GFLOPS
HD4870 RV770 750 MHz DDR5 800 1200 GFLOPS 240 GFLOPS 120 GFLOPS
HD4890 RV770 850 MHz DDR5 800 1360 GFLOPS 272 GFLOPS 136 GFLOPS

x2のボードは単純に2倍の性能

  • Stream Coreと呼ばれる単精度浮動小数点演算器が800個搭載されており、それぞれが単精度でMultiply-Addが可能なprocessorである。Stream Coreには2種類あり、片方は単純に単精度演算ができるStream Core(SC)で、他方は三角関数なども演算可能なT-Stream Core(T-SC)である。
  • 4組のSCとひとつのT-SCが組になり、5 wayのVLIW processorを構成している。このThread Processor(TP)は、内部に128個(?)の128 bit汎用レジスタとその他一時レジスタなどをもつ(はず)。TPの命令実行には様々なパターンがあり、最大で5個の単精度または32 bit整数演算、あるいは4個の単精度/整数演算+1個の関数演算、あるいは2個の倍精度加算、または1個の倍精度乗算が実行できる。RV770は合計で160個のTPを持つ。
  • TPが16組集まってSIMD engineとよばれるユニットを構成する。SIME engineには共有メモリ(Local Data Store;LDS)と外部メモリへのtwo-levelのキャッシュがある。SIMD engine内では、LDSを利用することでTP間のデータのやりとりをおこなうことができる。SIMD engine内のTPは同一の命令を実行する。RV770は合計で10個のSIMD engineを持つ
  • SIMD engineへの命令の供給と制御はUltra-threaded Dispatch Processor(UTDP)というユニットがおこなう。UTDPは、異なるSIMD engineに別々の命令を供給することが可能。そのためRV770全体ではSIMD実行ではなくMPMD実行になる場合がある。また、名前からするとひとつのSIMD engineに供給する命令流を複数切り替えることで、メモリの読み込み隠蔽などをおこなったりもするのだろう。
  • HD4870とHD4850の違いはRV770チップの動作クロック(750 MHz vs. 625 MHz)だけでなく、外部メモリへのインターフェイスも違う。4870はDDR5メモリと接続され、メモリ帯域幅は115.2 GB/sec (256 bit bus, data clock rate 3600 MHz)である。4850はDDR3メモリと接続され、メモり帯域幅はX GB/sec (256 bit bus, data clock rate X MHz)である。HD4890はHD4870のクロックをさらにあげて850 MHzとしたもの。メモリクロックもあがってる?
  • 単精度での理論性能は以下の式で計算される:
     単精度性能 = (Number of TP) * 5 (ways) * 2 (FP ops) * clock (MHz) = X MFLOPS
    
  • 倍精度については、生成されたR770のアセンブラソースを見ると:
    • 加算はStream Coreを2個利用
    • 乗算はStream Coreを4個利用
    • 除算は単精度の初期値をつかってどうにか

のように実行されるようだ。単精度での理論性能は全ての命令がmultiply-addの時に達成されるものであるため、結果的に倍精度加算は単精度性能の2/5の半分で1/5の性能となり、乗算はさらにその半分の1/10の性能になる。

  • 内積演算に使えるMultiply-Addの場合、4個を使って2演算なので加算の性能と同じになる。

Linuxにおける利用方法

CALプログラムの基本

以下は2008年度卒研用に中里が作成したものである。SDKのバージョンが1.2.1betaの時点での情報である。 利用しているGPUボードは、HD4850 512MBのもの。HD4870 1GBのボードでも同様に利用できている。

preliminary results

No image "GFLOPS.png" attached to CALによるGPUプログラミング

one interaction 20 FP ops CALLIB/trunk/S_2dim

Attachments (1)

Download all attachments as: .zip