=============================== GRAPE ソフトウェアパッケージ grapepkg version 1.6 =============================== grapepkg は各種 GRAPE 用のライブラリや管理ソフトウェア、ドキュメント、 サンプルプログラムを統合したソフトウェアパッケージです。当社開発による GRAPE-9, GRAPE-DR, GRAPE-7 に加え、GRAPE-6A, GRAPE-6BX, Phantom-GRAPE-5 向けのソ フトウェアも統合されています。オプションパッケージ CUDA G5/G6 には NVIDIA 社 CUDA デバイス (GPU) に対応した G5 および G6 互換ライブラリも 含まれています。 パッケージには以下のものが含まれています。 ./00readme-j -- パッケージの概要説明 ./00readme -- 00readme-j の英語版 ./doc/ -- ユーザガイド、リファレンスマニュアル、その他の文書 ./script/ -- パッケージ管理用のツール (インストール、バックアップ等) ./include -- ヘッダファイル ./lib/ -- ライブラリ ./driver/ -- GRAPE-9, GRAPE-DR, GRAPE-7 用デバイスドライバ ./hibutil/ -- GRAPE-9, GRAPE-DR, GRAPE-7 用 Host Interface Bridge (HIB) に関連する各種ソフトウェア ./g9/ -- GRAPE-9 用の各種ソフトウェア ./gdr/ -- GRAPE-DR 用の各種ソフトウェア ./g7/ -- GRAPE-7 用の各種ソフトウェア ./g6a/ -- GRAPE-6A 用の各種ソフトウェア ./g6bx/ -- GRAPE-6BX 用の各種ソフトウェア ./pg5/ -- Phantom-GRAPE-5 用の各種ソフトウェア ./cuda/ -- CUDA デバイス用の各種ソフトウェア [CUDA G5/G6 オプションパッケージ] ./sample/ -- サンプルコード ./sample/direct/ -- 直接法、shared timestep による多体計算コード。言語:C ./sample/directf/ -- 直接法、shared timestep による多体計算コード。言語:Fortran ./sample/vtc/ -- Barnes-Hut ツリー、shared timestep による多体計算コード。言語:C ./sample/s9/ -- 直接法、shared timestep による多体計算コード。言語:C ./sample/s8/ -- 直接法、individual timestep による多体計算コード。言語:C ./sample/s8f/ -- 直接法、individual timestep による多体計算コード。言語:Fortran ./sample/pairwise/ -- 2 体間相互作用の演算精度を検査するコード。言語:C ./init/ -- 粒子分布のスナップショット。本パッケージが GRAPE の動作テスト に使用します。 ./tmp/ -- 本パッケージが内部的に使用します。 ./ttf/ -- GRAPE-7 model300, model600 用の回路データ (.ttf) このディ レクトリはオプションです。取得した grapepkg の種別に よっては、このディレクトリが含まれていない場合があります。 このディレクトリ内のファイルは当社 Web サイトより別途 ダウンロードできます (http://www.kfcr.jp/grape7.html)。 目次 ==== 1. インストールと使用準備 1.1 パッケージのインストール 1.2 GRAPE-9 の使用準備 1.3 GRAPE-DR の使用準備 1.4 GRAPE-7 の使用準備 1.5 GRAPE-6A の使用準備 1.6 GRAPE-6BX の使用準備 1.7 Phantom-GRAPE-5 の使用準備 1.8 CUDA G5/G6 の使用準備 2. コンパイルとリンク 3. 環境変数 3.1 GDEVICE : 計算資源の割り当て 3.2 GWARNLEVEL : 警告メッセージの制御 4. サンプルプログラム 5. 互換性 6. CUDA G5 特有の拡張機能 6.1 Multiple Walks 法への対応 7. CUDA G6 特有の拡張機能 7.1 j 粒子転送の最適化 8. 動作確認済みのプラットフォーム 9. 参考文献 10. ライセンスと著作権 11. 謝辞 12. 改変履歴 13. 連絡先 1. インストールと使用準備 ========================= 1.1 パッケージのインストール ---------------------------- 本パッケージをインストールするには以下のコマンドを実行し、指示に従って ください。なお下記の $pkgroot は grapepkg の最上位ディレクトリを表します。 $pkgroot/script/install 1.2 GRAPE-9 の使用準備 ---------------------- ホスト計算機を起動しなおす毎に、以下 (1)〜(3) の手続きが必要です。 (1) [要 root 権限] デバイスドライバのインストール ディレクトリ $pkgroot/driver/ にて、以下のコマンドを実行してください。 make installmodule このコマンドにより、GRAPE-9 用のデバイスドライバが Linux カーネル にリンクされます。正常にリンクされると、/sbin/lsmod の出力に hibdrv という文字列が含まれるようになります。 (2) [要 root 権限] MTRR の設定 Linux kernel バージョン 2.6.26 以降を使用しており、カーネルの page attribute table (PAT) サポートが有効化されている場合には、この設定 は不要です。次の手続きに進んでください。 Linux kernel バージョン 2.6.26 未満を使用している、あるいはカーネル の page attribute table (PAT) サポートが無効化されている場合には、 MTRR の設定が必要です。ディレクトリ $pkgroot/driver/ にて以下のコマ ンドを実行してください。 ./setmtrr このコマンドにより、ホスト計算機の MTRR (memory type range register) が "write-combining" モードに設定されます。この設定によっ て、ホスト計算機から GRAPE への Programmed I/O Write (PIOW) 方式に よるデータ転送の速度が向上します。 注意 1: PAT サポートの有無は、Linux kernel のヘッダファイル autoconf.h (e.g. /usr/src/linux/include/linux/autoconf.h) で確認できます。ファ イル内で定数 CONFIG_X86_PAT が定義されていれば PAT サポートは有効に なっています。 注意 2: ホスト計算機の設定によっては MTRR を設定できないことがあります (メ モリを 4GB 以上搭載している場合や、8 個すべての MTRR が他の PCI デ バイスによって既に使用されている場合など)。この場合には MTRR の設 定は行わないまま、以降すべての手続きを行って下さい。MTRR を設定し た場合に比べるとホスト計算機から GRAPE への転送性能が低下しますが、 それ以外のすべての機能は正常に動作します。 (3) GRAPE-9 の動作チェック 以下のコマンドを実行してください。GRAPE-9 を用いて重力多体計算を 行い、得られた結果と、あらかじめ用意されている正解とを比較します。 $pkgroot/script/check 1.3 GRAPE-DR の使用準備 ----------------------- ホスト計算機を起動しなおす毎に、以下 (1)〜(4) の手続きが必要です。 (1) [要 root 権限] デバイスドライバのインストール ディレクトリ $pkgroot/driver/ にて、以下のコマンドを実行してください。 make installmodule このコマンドにより、GRAPE-DR 用のデバイスドライバが Linux カーネル にリンクされます。正常にリンクされると、/sbin/lsmod の出力に hibdrv という文字列が含まれるようになります。 (2) [要 root 権限] MTRR の設定 Linux kernel バージョン 2.6.26 以降を使用しており、カーネルの page attribute table (PAT) サポートが有効化されている場合には、この設定 は不要です。次の手続きに進んでください。 Linux kernel バージョン 2.6.26 未満を使用している、あるいはカーネル の page attribute table (PAT) サポートが無効化されている場合には、 MTRR の設定が必要です。ディレクトリ $pkgroot/driver/ にて以下のコマ ンドを実行してください。 ./setmtrr このコマンドにより、ホスト計算機の MTRR (memory type range register) が "write-combining" モードに設定されます。この設定によっ て、ホスト計算機から GRAPE への Programmed I/O Write (PIOW) 方式に よるデータ転送の速度が向上します。 注意 1: PAT サポートの有無は、Linux kernel のヘッダファイル autoconf.h (e.g. /usr/src/linux/include/linux/autoconf.h) で確認できます。ファ イル内で定数 CONFIG_X86_PAT が定義されていれば PAT サポートは有効に なっています。 注意 2: ホスト計算機の設定によっては MTRR を設定できないことがあります (メ モリを 4GB 以上搭載している場合や、8 個すべての MTRR が他の PCI デ バイスによって既に使用されている場合など)。この場合には MTRR の設 定は行わないまま、以降すべての手続きを行って下さい。MTRR を設定し た場合に比べるとホスト計算機から GRAPE への転送性能が低下しますが、 それ以外のすべての機能は正常に動作します。 (3) GRAPE-DR の初期化 以下のコマンドを実行してください。GRAPE-DR チップやボードの初期化 と、簡単な動作テストを行います。 $pkgroot/script/config model450, model1800 をお使いの方への注意: model450, model1800 の初期化には、上記コマンドの代わりに、それぞれ $pkgroot/gdr/test/config450 $pkgroot/gdr/test/config1800 をお使いください。 (4) GRAPE-DR の動作チェック 以下のコマンドを実行してください。GRAPE-DR を用いて重力多体計算を 行い、得られた結果と、あらかじめ用意されている正解とを比較します。 $pkgroot/script/check model450, model1800 をお使いの方への注意: model450, model1800 の初期化には、上記コマンドの代わりに、それぞれ $pkgroot/gdr/test/check450 $pkgroot/gdr/test/check1800 をお使いください。 1.4 GRAPE-7 の使用準備 ---------------------- ホスト計算機を起動しなおす毎に、以下 (1)〜(4) の手続きが必要です。 (1) [要 root 権限] デバイスドライバのインストール ディレクトリ $pkgroot/driver/ にて、以下のコマンドを実行してください。 make installmodule このコマンドにより、GRAPE-7 用のデバイスドライバが Linux カーネル にリンクされます。正常にリンクされると、/sbin/lsmod の出力に hibdrv という文字列が含まれるようになります。 (2) [要 root 権限] MTRR の設定 Linux kernel バージョン 2.6.26 以降を使用しており、カーネルの page attribute table (PAT) サポートが有効化されている場合には、この設定 は不要です。次の手続きに進んでください。 Linux kernel バージョン 2.6.26 未満を使用している、あるいはカーネル の page attribute table (PAT) サポートが無効化されている場合には、 MTRR の設定が必要です。ディレクトリ $pkgroot/driver/ にて以下のコマ ンドを実行してください。 ./setmtrr このコマンドにより、ホスト計算機の MTRR (memory type range register) が "write-combining" モードに設定されます。この設定によっ て、ホスト計算機から GRAPE への Programmed I/O Write (PIOW) 方式に よるデータ転送の速度が向上します。 注意 1: PAT サポートの有無は、Linux kernel のヘッダファイル autoconf.h (e.g. /usr/src/linux/include/linux/autoconf.h) で確認できます。ファ イル内で定数 CONFIG_X86_PAT が定義されていれば PAT サポートは有効に なっています。 注意 2: ホスト計算機の設定によっては MTRR を設定できないことがあります (メ モリを 4GB 以上搭載している場合や、8 個すべての MTRR が他の PCI デ バイスによって既に使用されている場合など)。この場合には MTRR の設 定は行わないまま、以降すべての手続きを行って下さい。MTRR を設定し た場合に比べるとホスト計算機から GRAPE への転送性能が低下しますが、 それ以外のすべての機能は正常に動作します。 (3) [model300, model600 のみ] FPGA 内部回路のコンフィグレーション カード上に搭載されている演算用 FPGA (pFPGA) に、重力演算回路 G5PIPE を書き込みます。この作業は Model 100 および Model 800 には 不要です。 ディレクトリ $pkgroot/g7/config/ にて、以下のコマンドを実行してください。 ./config [devid] このコマンドにより、デバイス ID として devid を持つカードの pFPGA に内部回路が書き込まれます。引数 devid を省略した場合にはデバイス ID 0 番のカードへ書き込みます。システムにカードを 1 枚しかインストー ルしていない場合には、そのカードのデバイス ID は 必ず 0 となるため、 引数は省略できます。複数のカードをインストールしている場合には、書 き込みを行うカードのデバイス ID を確認し、コマンドconfig への引数 として指定する必要があります。デバイス ID の確認にはコマンド $pkgroot/script/lsgrape を用います。 (4) GRAPE-7 の動作チェック 以下のコマンドを実行してください。GRAPE-7 を用いて重力多体計算を 行い、得られた結果と、あらかじめ用意されている正解とを比較します。 $pkgroot/script/check GRAPE-7 のインストール方法、使用準備に関するより詳しい説明は「GRAPE-7 インストールガイド」($pkgroot/doc/g7install-j.pdf) を参照してください。 G5PIPE (GRAPE-7 用 GRAPE-5 互換回路) の使用法については「G5PIPE ユーザ ガイド」($pkgroot/doc/g5user-j.pdf) を参照してください。 1.5 GRAPE-6A の使用準備 ----------------------- (1) [要 root 権限] デバイスドライバのインストール ディレクトリ $pkgroot/g6a/pcimem/ にて、以下のコマンドを実行してください。 make installmodule このコマンドにより、GRAPE-6A 用のデバイスドライバが Linux カーネル にリンクされます。正常にリンクされると、コマンド /sbin/lsmod の出 力に pcimem という文字列が含まれるようになります。 (2) 初期化 ディレクトリ $pkgroot/g6a/lib/ にて、 g6aconfig を実行します。 (3) 動作チェック ディレクトリ $pkgroot/g6a/s8 にて、 make s8 s8 を実行し、$pkgroot/g6a/s8/sample.1k と比較します。 1.6 GRAPE-6BX の使用準備 ------------------------ (1) [要 root 権限] デバイスドライバのインストール ディレクトリ $pkgroot/g6bx/pcixmem/ にて、以下のコマンドを実行してください。 make installmodule このコマンドにより、GRAPE-6BX 用のデバイスドライバが Linux カーネル にリンクされます。正常にリンクされると、コマンド /sbin/lsmod の出 力に pcixmem という文字列が含まれるようになります。 (2) 動作チェック ディレクトリ $pkgroot/g6bx/s8 にて、 make s8 s8 を実行し、$pkgroot/g6bx/s8/sample.1k と比較します。 1.7 Phantom-GRAPE-5 の使用準備 ------------------------------ Phantom-GRAPE-5 はパッケージのインストールを完了次第、すぐに使用できます。 使用前の初期化手続き等は不要です。 1.8 CUDA G5/G6 の使用準備 ------------------------------ 注意 : CUDA G5/G6 をお使い頂くには GRAPE ソフトウェアパッケージの CUDA G5/G6 オプション をお買い求め頂く必要があります。 (1) インストール NVIDIA 社の CUDA 開発環境をインストールしたのちに、本パッケージをインス トールしてください。 補足 : CUDA 開発環境インストールの概要 1) NVIDIA 社のサイトから以下の 3 種のソフトウェアパッケージを入手します。 a) Developer Drivers for Linux b) CUDA Toolkit c) GPU Computing SDK code samples 2) パッケージ a, b をルート権限下で実行し、その指示にしたがってインストールを行います。 3) b をインストールしたディレクトリを $cudapath とおくとき、$cudapath/bin に実行パス PATH を通します。また $cudapath/lib64 に動的ライブラリのロードパス LD_LIBRARY_PATH を通します。 例: csh> setenv /usr/local/cuda/bin:$PATH csh> setenv LD_LIBRARY_PATH /usr/local/cuda/lib64:$LD_LIBRARY_PATH sh> export PATH=/usr/local/cuda/bin:$PATH sh> export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH 4) パッケージ c を実行し、その指示に従ってインストールを行います。 この作業には、ルート権限は必ずしも必要ではありません。 CUDA 開発環境インストールの詳細手順については NVIDIA 社の資料を参照してください。 (2) CUDA G5/G6 の動作チェック 以下のコマンドを実行してください。GUDA G5/G6 を用いて重力多体計算を 行い、得られた結果の妥当性を検証します。 $pkgroot/script/check_cuda (3) 初期化 インストールを完了次第、すぐに使用できます。使用前の初期化手続き等は不要です。 2. コンパイルとリンク ===================== ユーザの作成したアプリケーションコードから各種 GRAPE を使用するために は、アプリケーションプログラムに制御ライブラリのヘッダファイルをインク ルードし、また制御ライブラリ本体をリンクします。 制御ライブラリの API には GRAPE-5 相当の機能を持つ G5 API と、GRAPE-6 相当の機能を持つ G6 API の 2 種類が用意されています。機種により、これら 2 つの API 両方を利用できるものと、片方だけを利用できるものがあります: - GRAPE-9 : カードに搭載された FPGA に書き込む回路によって、利用でき る API が変わります。回路 G5PIPE が書き込まれている場合に は G5 API の基本機能を、 G6PIPE が書き込まれている場合に は G6 API の基本機能を利用できますが、近傍粒子探索など一 部利用できない機能があります。G5 API, G6 API のすべての API を使用するには、回路 G5nbPIPE、G6nbPIPE が必要です。 - GRAPE-DR : G5 API, G6 API の両方を利用できます。 - GRAPE-7 : カードに搭載された FPGA に書き込む回路によって、利用でき る API が変わります。回路 G5PIPE が書き込まれている場合に は G5 API の基本機能を利用できますが、近傍粒子探索など一 部利用できない機能があります。G5 API のすべての API を使 用するには、回路 G5nbPIPE が必要です。 - Phantom-GRAPE-5 : G5 API のみを利用できます。 G5PIPE、G5nbPIPE の詳細については、それぞれ「G5PIPE ユーザガイド」 ($pkgroot/doc/g5user-j.pdf) 「G5nbPIPE ユーザガイド」 ($pkgroot/doc/g5nbuser-j.pdf) を参照してください。 G6PIPE、G6nbPIPE、G6nnbPIPE の詳細に関するドキュメントは現在準備中です。 各 GRAPE の使用時に必要なヘッダおよびライブラリ、その他のコンパイルオプション等は下表の通りです。 ---------------------------------------------------------------------------------------------------------- GRAPE の種別 API ヘッダ ライブラリ オプション等 ---------------------------------------------------------------------------------------------------------- GRAPE-9(G6PIPE) G6 g6util.h libg96.a libhib.a libm.a GRAPE-9(G6nbPIPE) G6 g6util.h libg96.a libhib.a libm.a GRAPE-9(G6nnbPIPE) G6 g6util.h libg96.a libhib.a libm.a GRAPE-9(G5PIPE) G5 g5util.h libg95.a libhib.a libm.a GRAPE-9(G5nbPIPE) G5 g5util.h libg95.a libhib.a libm.a GRAPE-DR G6 g6util.h libgdr6.a libhib.a libm.a G5 g5util.h libgdr5.a libhib.a libm.a GRAPE-7(G5PIPE) G5 g5util.h libg75.a libhib.a libm.a GRAPE-7(G5nbPIPE) G5 g5nbutil.h libg75nb.a libhib.a libm.a GRAPE-6A G6 g6util.h libg6a6.a libm.a G5 g5util.h libg6a5.a libm.a GRAPE-6BX G6 g6util.h libg6bx6.a libg6bxhib.a libm.a G5 g5util.h libg6bx5.a libg6bxhib.a libm.a Phantom-GRAPE-5 G5 g5util.h libpg55.a libm.a CUDA G5/G6 G5 g5util.h libcuda5.a libcudart.so(注1) libm.a libstdc++ -pthread libcuda5s.a(注2) G6 g6util.h libcuda6.a libcudart.so libm.a libstdc++ -pthread ---------------------------------------------------------------------------------------------------------- (注1) CUDA Toolkit をインストールしたパスを $cudapath とおくとき、 libcudart.so は $cudapath/lib に置かれます。 (注2) libcuda5s.a は数値表現として単精度(32-bit浮動小数点)を使用します。 libcuda5.a は擬似倍精度(加算64-bit,乗算32-bit浮動小数点)を使用します。 コンパイルオプションの例: アプリケーションコード foo.c から G5 API を介して GRAPE-9 を使用 cc -o foo foo.c -L$pkgroot/lib -I$pkgroot/include -lg95 -lm アプリケーションコード foo.c から G6 API を介して GRAPE-DR を使用 cc -o foo foo.c -L$pkgroot/lib -I$pkgroot/include -lgdr6 -lhib -lm アプリケーションコード foo.c から G5 API を介して NVIDIA 社製 GPU を使用 cc -pthread -o foo foo.c -L$pkgroot/lib -L$cudapath/lib -I$pkgroot/include -lcuda5 -lcudart -lm -lstdc++ 3. 環境変数 =========== GRAPE-9, GRAPE-DR, GRAPE-7 用制御ライブラリ、及び Phantom-GRAPE-5, CUDA G5/G6 ラ イブラリは、以下の環境変数によって挙動を制御できます。なおこれらの環境 変数は、GRAPE-6A, GRAPE-6BX 用の制御ライブラリでは使用されません。 3.1 GDEVICE : 計算資源の割り当て -------------------------------- システムに複数枚のカードがインストールされている場合、GRAPE の制御ライ ブラリはすべてのカードを使用して計算を行おうとします。この挙動を変更す るには、使用したいカードのデバイス ID を環境変数 GDEVICE に列挙します。 例えば以下の設定: csh> setenv GDEVICE "0 2 3" sh> export GDEVICE="0 2 3" により、G5 の標準関数はデバイス ID 0 番、2 番、3 番 のカードを使用する ようになります。この環境変数はひとつのシステムを他のユーザと共同で利用 する際に役立ちます。 なお GRAPE-DR model1800/2000/4000, GRAPE-7 model 800, 一部の GPU (GeForce GTX 295 など) については、同一のカードに搭載されている複数の演 算チップに、別個のデバイス ID が割り当てられます。そのためそれぞれのチッ プを独立した GRAPE とみなし、別個の計算に使用することも可能です。例えば システムに 1 枚の GRAPE-DR model 1800 のみがインストールされている場合、 以下の設定: csh> setenv GDEVICE "0 2" sh> export GDEVICE="0 2" を行うと、カード上の 0 番および 2 番の GRAPE-DR チップを使用して計算が 行われます。使用されていない 1 番および 3 番のチップは、他の計算に使用 することが可能です。 3.2 GWARNLEVEL : 警告メッセージの制御 ------------------------------------- 警告メッセージの出力を制御します。この変数は 0, 1, 2, 3 のいずれかの値 を取り得ます。大きな値を設定するほど、より詳細なメッセージが出力されま す。通常利用の際には 1 か 2 を設定することをお勧めします。3 はデバッグ 時に便利かもしれません。0 を設定すると致命的なエラーメッセージ以外の一 切のメッセージが出力されなくなります。動作テスト用プログラム ( $pkgroot/script/check) 実行時には、この変数の値を 0 には設定しないでく ださい。0 に設定するとテストが正常に行われません。 4. サンプルプログラム ===================== 各種 GRAPE を使用するサンプルプログラムがディレクトリ $pkgroot/sample/ 以下に用意されています。原則的には、リンクするライブラリを変更するだけ で、同じサンプルプログラムから各種の GRAPE を用いることができます。た だしすべてのプログラムがすべての GRAPE に対応しているわけではありません。 例えば $pkgroot/sample/direct/ には、直接法による多体計算のサンプルプロ グラムが用意されています。パッケージのインストール時に、このサンプルの 各種 GRAPE 向け実行ファイル direct_g9, direct_gdr, direct_g7, direct_g6bx, direct_pg5, direct_cuda が生成されます (順に GRAPE-9, GRAPE-DR, GRAPE-7, GRAPE-6BX, Phantom-GRAPE-5, CUDA G5 向け) が、GRAPE-6A 向けの実行ファイ ルは生成されません。 各サンプルプログラムをビルドするには 2 通りの方法があります: 方法 1 : 各ディレクトリ内にある 00recompile というシェルスクリプトを実 行してください。各サンプルコードがサポートしているすべての機種 向けの実行ファイルが生成されます。 方法 2 : 各ディレクトリ内で make してください。GRAPE-DR 向けの実行ファ イルが生成されます。他のアーキテクチャ向けのビルドを行うには Makefile を適宜書き換えてください。Makefile 冒頭に、修正方法に 関する説明があります。 5. 互換性 ========= G5 API、G6 API はそれぞれ GRAPE-5、GRAPE-6 に互換の機能を提供しますが、 機種によっては一部実装されていない機能や、制限のある機能があります。 このような機能について、下表にまとめます。 G5 API の互換性 ----------------------------------------------------------------------------------------------------------------- GRAPE の種別 GRAPE-5相当の ポテンシャル カットオフ 近接粒子リスト デバイス当りの デバイス当りの 演算精度 計算機能 関数 生成機能 パイプライン数 粒子メモリサイズ ----------------------------------------------------------------------------------------------------------------- オリジナル GRAPE-5 - あり 可変 あり 96 131071 GRAPE-9(G5PIPE) あり なし P3M用に固定 なし 56 67108864 GRAPE-9(G5nbPIPE) あり なし P3M用に固定 あり 42 67108864 GRAPE-DR あり あり P3M用に固定 なし 256 4194304 GRAPE-7(G5PIPE) あり なし P3M用に固定 なし 20-120 4095-24570 GRAPE-7(G5nbPIPE) あり なし P3M用に固定 あり 20-120 4095-24570 GRAPE-6A あり あり P3M用に固定 あり 48 65536 GRAPE-6BX あり あり P3M用に固定 あり 48 262144 Phantom-GRAPE-5 なし なし なし なし 4 65536 CUDA G5 あり あり P3M用に固定 なし 8192 1048576 ----------------------------------------------------------------------------------------------------------------- G6 API の互換性 ----------------------------------------------------------------------------------------------------------------- GRAPE の種別 ポテンシャル カットオフ 近接粒子リスト 最近接粒子 デバイス当りの デバイス当りの 計算機能 関数 生成機能 探索機能 パイプライン数 粒子メモリサイズ ----------------------------------------------------------------------------------------------------------------- GRAPE-9(G6PIPE) なし なし なし なし 10 8388608 GRAPE-9(G6nnbPIPE) あり なし なし あり 9 8388608 (nnb 機能は524286まで) GRAPE-9(G6nbPIPE) あり P3M用に固定 あり あり (調整中) (調整中) GRAPE-DR あり なし なし あり 256 1048576 GRAPE-6A あり なし あり あり 48 65536 GRAPE-6BX あり なし あり あり 48 262144 CUDA G6 あり なし なし あり 8192 1048576 ----------------------------------------------------------------------------------------------------------------- 6. CUDA G5 特有の拡張機能 ========================= 6.1 Multiple Walks 法への対応 ----------------------------- CUDA G5 は GPU 向けツリー法の性能を向上するためのアルゴリズム Multiple Walks 法に対応しています。 従来の GRAPE 向けツリー法では、一組の j 粒子グループから一組の i 粒子グ ループへの力を GRAPE 上で計算し、結果をホスト計算機へ回収する、という手 順を繰り返します。 これに対して Multiple Walks 法を採用したツリー法では、j 粒子グループか ら i 粒子グループへの力の計算を、一度に複数組、GPU へ投入します。こうす ることによって GPU 上の演算器を効率よく利用でき、またホスト計算機と GPU との間のデータ転送効率も向上させることができます (詳細については [1] を参照してください)。 Multiple Walks 法は濱田剛氏 (長崎大学) と似鳥啓吾氏 (理化学研究所) が 命名し、GPU 向けツリー法の性能向上のために採用したアルゴリズムです [1]。 このツリー法を用いた計算は 2009 年の Gordon Bell 賞を受賞しました。 CUDA G5 には、Multiple Walks 法のために、新しい API g5_flush_runs() お よび g5_flush_runsMC() が追加されています。これを以下の手順で使用すると、 Multiple Walks 法による重力計算を行えます。 (1) 環境変数 G5_MULTIWALK の値を 1 に設定する。 (2) 従来の G5 API を用いて j 粒子の転送、i 粒子の転送、重力演算の実行、 演算結果の回収を行うループを、Nwalk 回実行する (ここで Nwalk は GPU へ一度に投入する i, j 粒子グループペアの個数)。 (3) g5_flush_runs() (あるいは g5_flush_runsMC()) を呼ぶ。 記述例: // (a) nwalk 個の i,j 粒子グループペアに対して従来の重力演算手続きを記述する for (w = 0; w < nwalk; w++) { g5_set_jp(0, n[w], mj[w], xj[w]); g5_set_eps2_to_all(eps*eps); g5_set_n(n[w]); for (off = 0; off < n[w]; off += npipe) { if (off + npipe > n[w]) { ni = n[w] - off; } else { ni = npipe; } g5_set_xi(ni, (double (*)[3])xj[w] + off); g5_run(); g5_get_force(ni, (double (*)[3])(a[w] + off), p[w] + off); } } // (b) nwalk 個のペアに対する演算を GPU へ投入し、結果を回収する。 g5_flush_runs(); (a) 環境変数 G5_MULTIWALK の値が 1 に設定されていると、g5_set_jp() や g5_runs() を呼び出した時点では粒子データの転送や重力演算は行 われなくなります。この時点では、転送や演算に必要な情報がホスト 計算機上の実行待ちキューに格納されます。 (b) g5_flush_runs() を呼び出した時点で、それまでにキューに格納され ていたデータ転送と重力演算が実行され、すべての演算結果が回収さ れます。 Multiple Walks 法を使用したサンプルプログラムが $pkgroot/sample/direct/multiwalktest.c にあります。このプログラムは直接 法による重力多体シミュレーションを、複数の粒子分布に対して実行します。 実行例: multiwalktest pl1k pl2k pl4k この例では粒子分布 pl1k, pl2k, pl4k に対するシミュレーションを実行します。 Multiple Walks 法を使用したツリー法のサンプルプログラムは現在準備中です。 7. CUDA G6 特有の拡張機能 ========================= 7.1 j 粒子転送の最適化 ---------------------- CUDA G6 は GPU 向けの individual timestep コードの性能を向上する ための機構を備えています。 従来の GRAPE 上の individual timestep コードでは、j 粒子を GRAPE 上の 粒子メモリへ転送する際に、粒子をひとつずつ、粒子メモリ上の不連続なアドレ スへ送信します。 GPU を用いる場合には、上記の転送方法は最適とは言えません。以下に示す手 順によってすべての j 粒子を粒子メモリ上の連続した領域へ一度の通信で送信 することにより、データ転送のオーバヘッドを低減し、転送効率を向上できます。 (1) 環境変数 G6_JPSORTED の値を 1 に設定する。 (2) j 粒子をデバイスへ送信するにあたっては、時刻の最も古い粒子から順に Nupdate 個の粒子を、粒子メモリの先頭からはじまる連続したアドレスに 送信する。より具体的には、g6_set_j_particle() をNupdate 回呼び出す。 この際に指定するアドレスは 0 から (Nupdate-1) まで 1 ずつインクリメ ントさせる。 なおここで、Nupdate は、直前のタイムステップにおいて空間座標が更新 された j 粒子の個数です。 上記の手順で j 粒子を送信するには、ホスト計算機上の j 粒子をあらかじめ 時刻の順にソートしておく必要があります。このような処理を行うサンプルプ ログラムが $pkgroot/sample/s8/sticky8.c にあります。このプログラムは上 記 (2) の手順に従って j 粒子を送信するため、環境変数 G6_JPSORTED の値を 1 に設定すると、実効性能が向上します。 注意 : 環境変数 G6_JPSORTED の値を 1 に設定した状態で、上記 (2) の手順 を満たさずに j 粒子を送信すると、正しい計算結果が得られません。 8. 動作確認済みのプラットフォーム ================================= Fedora Core 5,10,11,13 x86_64 CentOS 5.4, 6.2 x86_64 9. 参考文献 =========== [1] T. Hamada, R. Yokota, K. Nidadori, T. Narumi, K. Yasuoka, M. Taiji "42 TFlops Hierarchical N-body Simulations on GPUs with Applications in both Astrophysics and Turbulence", SC09 (ACM/IEEE) 2009. 10. ライセンスと著作権 ===================== 本ソフトウェアパッケージの利用許諾は以下に明示するものを除き MIT ライセ ンス (後述) に従います。ただし $pkgroot/driver/ ディレクトリ、 $pkgroot/g6a/pcimem/ ディレクトリ、$pkgroot/g6bx/pcixmem/ ディレクトリ については GNU General Public License (GPL) に従います。 本ソフトウェアのオプションパッケージ CUDA G5/G6 のみに付属する $pkgroot/cuda/ ディレクトリについては、再配布を禁じます。 本ソフトウェアパッケージの著作権は株式会社 K&F Computing Research (以 下 KFCR 社と記す) に帰属します。 ただし Phantom-GRAPE-5、つまり $pkgroot/pg5/ ディレクトリに置かれたソー スコードのうち $pkgroot/pg5/phantom_g5mc.c を除いた部分については似鳥 啓吾 (理化学研究所) に帰属します。$pkgroot/pg5/phantom_g5mc.c について は KFCR 社に帰属します。 また、$pkgroot/g6a/ ディレクトリ、$pkgroot/g6bx/ ディレクトリから $pkgroot/g6a/pcimem/ ディレクトリ、$pkgroot/g6bx/pcixmem/ ディレクトリ を除いた部分については福重俊幸に帰属します。$pkgroot/driver/ ディレク トリ、$pkgroot/g6a/pcimem/ ディレクトリ、$pkgroot/g6bx/pcixmem/ ディレ クトリについては川井敦に帰属します。 ------------------------------------------------------------------------------- MIT ライセンス (日本語訳) 以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル (以下 「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制 限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複 写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、 およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含ま れます。 上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重 要な部分に記載するものとします。 ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何ら の保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適 合性、および権利非侵害についての保証も含みますが、それに限定されるもの ではありません。作者または著作権者は、契約行為、不法行為、またはそれ以 外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使 用またはその他の扱いによって生じる一切の請求、損害、その他の義務につい て何らの責任も負わないものとします。 ------------------------------------------------------------------------------- MIT ライセンス (原文) The MIT Software License: Copyright (c) 2009-, K&F Computing Research Co. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- 11. 謝辞 ======= 本ソフトウェアパッケージの作成、改変には以下の方の協力を頂きました。 ここに感謝の意を表します: 似鳥 啓吾氏 (理化学研究所)、濱田剛氏 (長崎大学) 12. 改変履歴 =========== -------------------------------------------------------------------------------------------------- version date author note -------------------------------------------------------------------------------------------------- 1.6.0 10-Feb-2015 AK [GRAPE-9] check スクリプトを改変。 [GRAPE-9] OpenMP によるデータ転送の並列化。 1.5.6 13-Jun-2014 AK [GRAPE-9] Cyclone V 版 G6nnbPIPE を DDR2 に対応。 DDR2 のステータスチェック機能を hibtest に追加。 1.5.5 28-Mar-2014 AK [GRAPE-9] Cyclone V 版 G5nbPIPE を DDR2 に対応。 1.5.4 20-Feb-2014 AK [GRAPE-9] Cyclone V 版 G6PIPE, G5nbPIPE に対応。 [GRAPE-DR] 粒子数 0 個の時の誤動作を修正。 hibutil.c の PIOW の潜在的な不具合を修正。 1.5.3 14-Jan-2014 AK [CUDA G5/G6] CUDA5.5 に対応。 1.5.2 18-Sep-2013 AK [GRAPE-9] Cyclone IV 版 G5nbPIPE に対応。 1.5.1 09-Sep-2013 AK [GRAPE-9] Cyclone V 版動作検証用スクリプトの不具合を修正。 1.5 14-Aug-2013 AK [GRAPE-9] Cyclone V 版プロセッサに対応。 1.4 10-May-2013 AK [GRAPE-9] G6PIPE,G5PIPEに外部メモリを追加。性能を向上。 1.3.6 20-Jul-2012 AK [GRAPE-9] ドキュメントを追加。動作検証用スクリプトを強化。 1.3.5 14-Jul-2012 AK [GRAPE-9] G6 API にポテンシャル計算機能、近接粒子探索機能、 最近接粒子探索機能、カットオフ機能を追加。 1.3.0 12-Feb-2012 AK GRAPE-9 に対応 (G6 API)。 1.2.4 02-Jan-2012 AK [CUDA G5/G6] CUDA4.0 に対応。 1.2.3 25-Oct-2011 TF, AK [GRAPE-DR] G5 API に最近接粒子探索機能を追加。 1.2.1 14-Dec-2010 AK [CUDA G5/G6] CUDA3.2 に対応。 1.2.0 22-Jun-2010 AK オプションパッケージ CUDA G5/G6 を追加。 GRAPE-DR 用 G6 ライブラリに fortran インタフェースを追加。 サンプルプログラムを増強し、簡易ビルドスクリプトを追加。 1.1.4 12-Mar-2010 TF GRAPE-DR 用 G6 ライブラリの不具合を修正。 1.1.3 23-Dec-2009 TF GRAPE-DR model2000, model460の新しい制御回路に対応。 GRAPE-DR 用 G5 API にカットオフ機能を追加。 GRAPE-DR 用 G6 API に後方互換性を維持するための修正を摘要。 1.1.2 28-Sep-2009 TF パッケージ管理用ツールを改良。 1.1.1 19-Sep-2009 AK 文書の英語版を追加。 1.1.0 17-Sep-2009 AK, TF GRAPE-DR model2000, model460 に対応。管理スクリプトを改良。 1.0 17-Jul-2009 A. Kawai, 初版作成。gdrpkg0.32, g7pkg2.2.1, g6apkg1.1, g6bx, T. Fukushige phantom_limited_accuracy_080110 をベースに改変、統合。 -------------------------------------------------------------------------------------------------- 13. 連絡先 ========= お問い合わせおよびバグレポートは下記へお願いします: K&F Computing Research (support@kfcr.jp)