基本情報
- AMD/ATi社のGPUを計算につかうための開発環境はATI Streamと呼ぶ
- そのうち低レベルなライブラリがCALである
- CALにより、仮想的なアセンブラ言語で記述したプログラムをGPUで実行できる
- ATI Stream SDK http://developer.amd.com/gpu/ATIStreamSDK/Pages/default.aspx
RV770の基本
- RV770のGPUチップは、Radeon HD4850, HD4870, HD4890として売られているボードに搭載されている。
- 正確にはアーキテクチャの名前はR700。4XXXの型番のものがいろいろあるが、規模に応じて演算器の個数が異なる。
- 性能まとめ表
board | arch | clock | memory仕様 | SPの数 | 単精度性能 | 倍精度加算性能 | 倍精度乗算性能 | バンド幅 |
HD4850 | RV770 | 625 MHz | DDR3 662 MHz 256bit | 800 | 1040 GFLOPS | 208 GFLOPS | 104 GFLOPS | 63.6 GB/sec |
HD4870 | RV770 | 750 MHz | DDR5 900 MHz 256bit | 800 | 1200 GFLOPS | 240 GFLOPS | 120 GFLOPS | 115.2 GB/sec |
HD4890 | RV770 | 850 MHz | DDR5 975 MHz 256bit | 800 | 1360 GFLOPS | 272 GFLOPS | 136 GFLOPS | 124.8 GB/sec |
HD4770 | RV740 | 750 MHz | DDR5 800 MHz 128bit | 640 | 960 GFLOPS | 192 GFLOPS | 96 GFLOPS | 51.2 GB/sec |
HD5870 | RV870 | 850 MHz | DDR5 1.2 GHz 256bit | 1600 | 2720 GFLOPS | 544 GFLOPS | 272 GFLOPS | 153.6 GB/sec |
HD5850 | RV870 | 725 MHz | DDR5 1.0 GHz 256bit | 1440 | 2088 GFLOPS | 418 GFLOPS | 209 GFLOPS | 128.0 GB/sec |
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は、SCを4個を使って2演算なので加算の性能と同じになる。
- ボード上のメモリはGDDR3のものとGDDR5のものがあり、それぞれのバンド幅の計算式は:
バンド幅 = (Memory clock) * 3 * (bus width) = X GB/sec (GDDR3の場合) バンド幅 = (Memory clock) * 4 * (bus width) = X GB/sec (GDDR5の場合)
Linuxにおける利用方法
- Ubuntuにインストール : Ubuntu 8.04 LTSへインストール
CALプログラムの基本
以下は2008年度卒研用に中里が作成したものである。SDKのバージョンが1.2.1betaの時点での情報である。 利用しているGPUボードは、HD4850 512MBのもの。HD4870 1GBのボードでも同様に利用できている。
- CALを説明したプレゼンファイル(2008年8月作成) : CAL200808.pdf (Ubuntuで見ると字がずれます)
- CALプログラミング(0) : 準備(非推奨) 別のやり方は wiki:"Ubuntuにインストール"を参照
- CALプログラミング(1) : 簡単なプログラム
- CALプログラミング(2) : 簡単なプログラムの拡張
- CALプログラミング(3) : ループとデータの読み込み
- CALプログラミング(4) : 2次元配列
- CALプログラミング(5)? : 倍精度
Results
see Astronomical_Many_Body_Simulations_On_RV770 and Tests_With_RV870
Last modified 15 years ago
Last modified on Oct 23, 2009 11:11:25 PM
Attachments (1)
- CAL200808.pdf (1.0 MB) - added by nakasato 16 years ago.
Download all attachments as: .zip