News Center

マルチGPUによる粒子法解析

[issued: 2008.03.21]

この記事を :  印刷する プリントする ブックマーク  はてなブックマークに登録 この記事をクリップ! Buzzurlにブックマーク Yahoo!ブックマークに登録 メールで送る メールで送る
 プロメテック・ソフトウェアの原田隆弘氏と政家一誠氏は、2008年3月6日に東京大学で行われた「Japan CUDA カンファレンス 2008」で粒子法(moving particle semi-implicit:MPS)解析にマルチGPUを活用する事例を発表した。

 粒子法解析とは、流体を小さな粒子の集合として取り扱い、その粒子間の相互作用をモデリングして解析する手法のことである。有限要素法などと異なりメッシュを生成する必要がないため、解析に要する時間を短縮できることや、飛沫の解析が行えるといった利点がある。津波や土砂流、配水管流などの流体解析に用いられる。

原田氏は、「GPUが備えるローカルメモリーには別のGPUが直接アクセスすることはできない。そのため、このデータ転送に時間がかかる」と粒子法解析をマルチGPUで行うに当たっての問題点を指摘。「個々のGPUに計算処理を完全に分離した形で割り当てることが、演算性能の向上に有効だ」(同氏)と説明した。

しかし、一般的な計算対象は、そのような形に完全に分離することはできない。そのため、実際には、クライアント‐サーバー型とピアツーピア型のうちいずれかのプログラムモデルを適用する方法が考えられる。
 
クライアント‐サーバー型は、CPUによって、複数のGPUで処理するデータの管理を行うプログラムモデルである。このモデルは、CPUで処理を行っている間はGPUが稼働しないので効率が悪い。つまり、CPUによるデータ管理が大きなオーバーヘッドになってしまうという問題がある。

 一方のピアツーピア型では、データを管理するプロセッサが存在しない。個々のGPUが自分のデータを管理して、ほかのGPUが必要とするデータを自ら受け渡す。この手法であれば、CPUによる逐次処理を必要としないので、完全な並列処理を実現可能だという。プロメテック・ソフトウェアは、このピアツーピア型を採用している。

 個々のGPUに対する処理分割は、シミュレーションの対象となる空間をいくつかに区切ることによって行っている。この手法では、分割した境界面に近接する粒子と境界を越えて移動する粒子のデータを隣のGPUに渡す必要がある。原田氏は、「境界を超えて移動する粒子の情報を逐次GPU間でやりとりするのは非効率」だとし、GPU間のデータ転送が頻繁に発生することが演算性能の低下につながることを指摘した。この課題に対しては、データを参照するが物理量は更新しないゴースト領域を境界部に設け、その周辺の粒子データをまとめて隣のGPUに受け渡す方法を用いた。それにより、解析の単位時間ごとに一固まりのデータを隣のGPUに1回転送するだけで済み、データ転送の頻度を抑えることができるのである。

 粒子解析を行った後には、結果を表示するためのレンダリング処理を行う必要がある。これに関しては、粒子解析に4個、レンダリング処理に1個のGPUを使う方法をとった。ただし、「例えば、25万個の粒子を4個のGPUそれぞれで演算する場合、レンダリング用のGPUは、100万個の粒子を取り扱う必要がある。これでは1個のGPUに処理負荷が集中してしまう」(原田氏)という課題があった。これに対しては、「レンダリングには表面の粒子しか必要ない」(原田氏)ことに着目し、4個のGPUで表面の粒子を抽出することで、レンダリングの処理負荷を分散する方法をとった。このような手法を用いることにより、50万個の粒子に対する流体解析において、シミュレーションの1ステップにかかる演算時間を20ms以下に抑えた。今後は、この技術を流体解析やゲームにおける物理シミュレーションなどに応用する予定だという。

(EDN Japan小野明久)

この記事を :  印刷する プリントする ブックマーク  はてなブックマークに登録 この記事をクリップ! Buzzurlにブックマーク Yahoo!ブックマークに登録 メールで送る メールで送る

Sponsor Links

Partner Solutions

EVENTS

DNJ RESOURCE CENTER

株式会社サンエイテック
高速、微小、定量の点塗布や線引塗布を可能にするスペースショットディスペンサー「イースター」

資料一覧を見る この資料をダウンロード