= 基本情報 = * AMD/ATi社のGPUをプログラムするための環境のひとつがCALである * 仮想的なアセンブラによりGPUで実行するためのプログラムを作成できる * SDK http://developer.amd.com/gpu/ATIStreamSDK/Pages/default.aspx = RV770の基本 = * RV770アーキテクチャのGPUチップは、Radeon HD4850, HD4870として売られているボードに搭載されている。 * 二つのボードの違いは、動作クロックとメモリインターフェイス * Shader Processorが800個搭載されており、それぞれが単精度でMultiply-Addが可能なprocessorである。実際には、単純に単精度演算ができるprocessor(Stream Core)が4個と関数演算もできるprocessor(T-Stream Core)が一緒になって、128 bitレジスタをもつ5 wayのVLIW processor(Thread Processor)になっているらしい。さらに、このTPが10組(Stream Processor?)でメモリを共有している(Local Data Store)と思われる。 * 以上のことから単精度での理論性能は以下の式で計算される: {{{ 単精度性能 = (Number of TP) * 5 (ways) * 2 (FP ops) * clock (MHz) = X MFLOPS }}} * 倍精度については、生成されたR770のアセンブラソースを見ると: * 加算はStream Coreを2個利用 * 乗算はStream Coreを4個利用 * 除算は単精度の初期値をつかってどうにか のように実行されるようだ。結果的に倍精度加算の性能は単精度性能の1/5となり、乗算は1/10になる。 * 性能まとめ表 || board || arch || clock || memory || SPの数 || 単精度性能 || 倍精度加算性能 || 倍精度乗算性能 || || HD4850 || RV770 || 650 MHz || DDR3 || 800 || 1040 GFLOPS || 208 GFLOPS || 104 GFLOPS || || HD4870 || RV770 || 750 MHz || DDR5 || 800 || 1200 GFLOPS || 240 GFLOPS || 120 GFLOPS || x2のボードは単純に2倍の性能 = Linuxにおける利用方法 = * [wiki:"Ubuntuにインストール"] : Ubuntu 8.04 LTSへインストール = CALプログラムの基本 = 以下は2008年度卒研用に中里が作成したものである。SDKのバージョンが1.2.1betaの時点での情報である。 利用しているGPUボードは、HD4850 512MBのもの。HD4870 1GBのボードでも同様に利用できている。 * CALを説明したプレゼンファイル(2008年8月作成) : [attachment:CAL200808.pdf] (Ubuntuで見ると字がずれます) * [wiki:"CALプログラミング(0)"] : 準備 * [wiki:"CALプログラミング(1)"] : 簡単なプログラム * [wiki:"CALプログラミング(2)"] : 簡単なプログラムの拡張 * [wiki:"CALプログラミング(3)"] : ループとデータの読み込み * [wiki:"CALプログラミング(4)"] : 2次元配列 * [wiki:"CALプログラミング(5)"] : 倍精度 = preliminary results = [[Image(GFLOPS.png)]]