2015年4月17日 15:24
GTC 2015 - 統計的データ処理で宇宙を理解する
1個のGPUでは能力が不足する場合は、3次元のボリュームをサブボリュームに分割して、それぞれを異なるCPUやGPUに担当させる。
銀河座標としてはθ、s、qと書かれており、それぞれの値が決まると、その値に対応するビンの内容を+1する。しかし、多数のスレッドが並列に計算を行っているので、複数のスレッドのθ、s、qが同じビンを指し、同時にその値を+1することが起こり得る。この場合のカウントが誤ることが無いように、アクセスを排他的にするatomicAdd命令を使っている。
次の図では全体を5ビンとした粗い刻みの破線と、25ビンとした細かい刻みの実線の結果を示している。5ビンでは平均化されてしまって傾向が見えないが、25ビンでは傾向が良く分かる。このように、θ、s、qの刻みを細かくすると分解能が上がるので望ましい。また、多数のビンができるので複数のスレッドが同じビンにアクセスして待ち時間が発生することも少なくなる。
一方、シェアードメモリの量が限られているので、ビンの数が多くなるとグローバルメモリを使わざるを得なくなり、性能が低下するという問題が出てくる。
次の表はCPU(Xeon E5-1620 v2)