| 4 | | * 具体的にはGRAPEなどと同じように、ホストから粒子の位置と質量をGPUに送り、GPU上で全粒子間で互いに及ぼし合う力を足しあわせて、結果として加速度を得るようなプログラムである。粒子間に働く力がニュートン重力の場合は、 |
| | 4 | * 具体的にはGRAPEなどと同じように、ホストから粒子の位置と質量をGPUに送り、GPU上で全粒子間で互いに及ぼし合う力を足しあわせて、結果として加速度を得るようなプログラムである。粒子間に働く力がニュートン重力の場合は、CAL200808.pdfで説明したIL kernelプログラムとなる。ループの部分のみを再掲すると、以下のようなものである。 |
| | 5 | {{{ |
| | 6 | whileloop |
| | 7 | ige r88.x___, r100.x, r77.x |
| | 8 | break_logicalnz r88.x |
| | 9 | sample_resource(0)_sampler(0) r0, r2 |
| | 10 | sub r5.xyz, r0.xyz, r4.xyz |
| | 11 | dp4 r6, r5, r5 |
| | 12 | rsq r7, r6 |
| | 13 | mul r8, r7, r7.xyz1 |
| | 14 | mul r8, r8, r7.xyz1 |
| | 15 | mul r9, r8, r5.xyz1 |
| | 16 | mad r3, r9, r0.w, r3 |
| | 17 | add r2.x___, r2.x, l1.x |
| | 18 | iadd r100.x___, r100.x, l0.z |
| | 19 | umod r101.x, r100.x, r77.y |
| | 20 | if_logicalz r101.x |
| | 21 | add r2.0y, r2.0y, l1.x |
| | 22 | endif |
| | 23 | endloop |
| | 24 | }}} |
| | 25 | |
| | 26 | * |