Changes between Version 16 and Version 17 of CALプログラミング(4)


Ignore:
Timestamp:
Mar 22, 2009 1:03:12 PM (16 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CALプログラミング(4)

    v16 v17  
    6464 
    6565 * 変数の意味と定数の値はそれぞれ以下のとおり: 
    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]"として宣言されているからである。 
    7272 
    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次元目の添え字に対応)をインクリメントしている。 
    7474  
    7575 * この13-18行を基にすることで、任意のサイズの2次元配列のランダムアクセスが可能であることがわかると思う。このILプログラムの場合、アクセスパターンが一定でありバースト的なため、GPUの内部構造に(特にキャッシュ機構)に適しており、非常に高速に動作する。一方、もしランダムアクセスを実装すると、メモリ読み込みのレイテンシーがパフォーマンスの問題となる可能性がある。