Changes between Version 17 and Version 18 of CALプログラミング(4)
- Timestamp:
- Mar 22, 2009 1:03:48 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CALプログラミング(4)
v17 v18 31 31 * 2粒子間の重力の計算をおこなっている部分は5-12行である。 32 32 33 * このILプログラムは、基本構造は(3)と同じであるが、ポインタ変数(ここでは" r2.xy")の処理が異なる。なぜかというと、粒子の座標が格納されているid = 0のリソースは2次元のメモリとして指定、確保されているからである。具体的には、ホスト側のプログラムで以下のようにメモリの確保をおこなった:33 * このILプログラムは、基本構造は(3)と同じであるが、ポインタ変数(ここでは"!r2.xy")の処理が異なる。なぜかというと、粒子の座標が格納されているid = 0のリソースは2次元のメモリとして指定、確保されているからである。具体的には、ホスト側のプログラムで以下のようにメモリの確保をおこなった: 34 34 {{{ 35 35 calResAllocLocal2D(&inputRes, device, nx, ny, CAL_FORMAT_FLOAT_4, 0); … … 75 75 * この13-18行を基にすることで、任意のサイズの2次元配列のランダムアクセスが可能であることがわかると思う。このILプログラムの場合、アクセスパターンが一定でありバースト的なため、GPUの内部構造に(特にキャッシュ機構)に適しており、非常に高速に動作する。一方、もしランダムアクセスを実装すると、メモリ読み込みのレイテンシーがパフォーマンスの問題となる可能性がある。 76 76 77 * "calResAllocLocal2D"または" CalResAllocRemote2D"で確保した場合でも、それぞれの次元でのサイズの最大値は8192と思われる。よって、ひとつのメモリ領域に割り当て可能な最大メモリ量は、256M個のfloat変数(またはLocalの場合、ボードの搭載メモリ量の制限値まで)になる。(この項詳しく調べる必要あり)77 * "calResAllocLocal2D"または"calResAllocRemote2D"で確保した場合でも、それぞれの次元でのサイズの最大値は8192と思われる。よって、ひとつのメモリ領域に割り当て可能な最大メモリ量は、256M個のfloat変数(またはLocalの場合、ボードの搭載メモリ量の制限値まで)になる。(この項詳しく調べる必要あり) 78 78 79 79