Changes between Version 15 and Version 16 of CALプログラミング(4)
- Timestamp:
- Mar 22, 2009 11:22:05 AM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CALプログラミング(4)
v15 v16 71 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 * この13-18行を基にすることで、任意のサイズの2次元配列のランダムアクセスが可能であることがわかると思う。 75 * この13-18行を基にすることで、任意のサイズの2次元配列のランダムアクセスが可能であることがわかると思う。このILプログラムの場合、アクセスパターンが一定でありバースト的なため、GPUの内部構造に(特にキャッシュ機構)に適しており、非常に高速に動作する。一方、もしランダムアクセスを実装すると、メモリ読み込みのレイテンシーがパフォーマンスの問題となる可能性がある。 76 76 77 77 * "calResAllocLocal2D"または"CalResAllocRemote2D"で確保した場合でも、それぞれの次元でのサイズの最大値は8192と思われる。よって、ひとつのメモリ領域に割り当て可能な最大メモリ量は、256M個のfloat変数(またはLocalの場合、ボードの搭載メモリ量の制限値まで)になる。(この項詳しく調べる必要あり)