Changes between Version 5 and Version 6 of CALプログラミング(4)


Ignore:
Timestamp:
Mar 22, 2009 4:00:53 AM (16 years ago)
Author:
nakasato
Comment:

--

Legend:

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

    v5 v6  
    22 * ここまでの説明を理解することで、最もシンプルなN体計算プログラムを作成できるはずである。 
    33 
    4  * 具体的にはGRAPEなどと同じように、ホストから粒子の位置と質量をGPUに送り、GPU上で全粒子間で互いに及ぼし合う力を足しあわせて、結果として加速度を得るようなプログラムである。粒子間に働く力がニュートン重力の場合は、[http://galaxy.u-aizu.ac.jp/trac/note/attachment/wiki/CALによるGPUプログラミング/CAL200808.pdf  CAL200808.pdf] で説明したIL kernelプログラムとなる。ループの部分のみを再掲すると、以下のようなものである。 
     4 * 具体的にはGRAPEなどと同じように、ホストから粒子の位置と質量をGPUに送り、GPU上で全粒子間で互いに及ぼし合う力を足しあわせて、結果として加速度を得るようなプログラムである。粒子間に働く力がニュートン重力の場合は、[http://galaxy.u-aizu.ac.jp/trac/note/attachment/wiki/CALによるGPUプログラミング/CAL200808.pdf  CAL200808.pdf] (60ページ以降)で説明しているIL kernelプログラムとなる。ループの部分のみを再掲すると、以下のようなものである。 
    55{{{ 
    66whileloop  
     
    2323endloop  
    2424}}} 
     25  
     26 * データ構造の定義の詳細についてはファイルを参照のこと。 
    2527 
    26  * このプログラムは、基本構造は(3)と同じであるが、ポインタ変数(ここでは"r2.xy")の処理が異なる。 
    27  
    28  * なぜかというと、粒子の座標が格納されているid = 0のリソースは2次元のメモリとして宣言されているからである。具体的には、ホスト側のプログラムで以下のようにメモリの宣言をおこなった: 
     28 * このILプログラムは、基本構造は(3)と同じであるが、ポインタ変数(ここでは"r2.xy")の処理が異なる。なぜかというと、粒子の座標が格納されているid = 0のリソースは2次元のメモリとして宣言されているからである。具体的には、ホスト側のプログラムで以下のようにメモリの宣言をおこなった: 
    2929{{{ 
    3030 
    3131}}} 
    3232 
    33  * なぜこうするかというと 
     33 * こうする大きな理由は、XXにより1次元のメモリとして確保した場合、その次元には8192までという制限があるためである。よって、CAL_FORMAT_FLOAT_4の場合であっても、最大で32k個のデータしか扱うことができない。 
    3434 
    3535= 2次元配列 =