Changes between Version 16 and Version 17 of CALプログラミング(4)
- Timestamp:
- Mar 22, 2009 1:03:12 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CALプログラミング(4)
v16 v17 64 64 65 65 * 変数の意味と定数の値はそれぞれ以下のとおり: 66 || r2.xy || 配列読み込みのポインタ ||67 || l1.x || 浮動小数点定数 1.0 ||68 || r100.x || ループカウンター 整数||69 || l0.z || 整数定数 1 ||70 || r77.y || 整数定数 配列の最下位次元の大きさ 256 ||71 " r77.y"の意味について補足すると、256になるのは、id = 0のメモリが"res0[256][256]"として宣言されているからである。66 ||!r2.xy || 配列読み込みのポインタ || 67 ||!l1.x || 浮動小数点定数 1.0 || 68 ||!r100.x || ループカウンター 整数|| 69 ||!l0.z || 整数定数 1 || 70 ||!r77.y || 整数定数 配列の最下位次元の大きさ 256 || 71 "!r77.y"の意味について補足すると、256になるのは、id = 0のメモリが"res0![256]![256]"として宣言されているからである。 72 72 73 * よってILプログラムのこの部分は、2次元配列のポインタ演算をおこなっているのと同等である。細かく説明すると、 r2.x(1次元目の添え字に対応)が0から1ずつ増えていき、256に等しくなったたら、それを0にクリアし、r2.y(2次元目の添え字に対応)をインクリメントしている。73 * よってILプログラムのこの部分は、2次元配列のポインタ演算をおこなっているのと同等である。細かく説明すると、!r2.x(1次元目の添え字に対応)が0から1ずつ増えていき、256に等しくなったたら、それを0にクリアし、!r2.y(2次元目の添え字に対応)をインクリメントしている。 74 74 75 75 * この13-18行を基にすることで、任意のサイズの2次元配列のランダムアクセスが可能であることがわかると思う。このILプログラムの場合、アクセスパターンが一定でありバースト的なため、GPUの内部構造に(特にキャッシュ機構)に適しており、非常に高速に動作する。一方、もしランダムアクセスを実装すると、メモリ読み込みのレイテンシーがパフォーマンスの問題となる可能性がある。