- 著者
-
臼井 英之
杉崎 由典
冨田 清司
大村 善治
三宅 洋平
青木 正樹
- 出版者
- 情報処理学会
- 雑誌
- 情報処理学会論文誌コンピューティングシステム(ACS) (ISSN:18827829)
- 巻号頁・発行日
- vol.1, no.2, pp.250-260, 2008-08-21
プラズマ粒子シミュレーションで電磁界成分を更新する際には電流値が必要であり,そのために,個々の粒子の運動量を各空間格子点に集める必要がある.しかし,粒子が空間的にランダムに分布しているため,電流計算の並列演算による高速化は容易ではなく工夫を要する.本論文では,粒子の位置情報を利用して各スレッドに粒子を明示的に割り当てるスレッド並列化アルゴリズムを新しく提案し,OpenMPを用いた実装によりその有効性を検証した.動作検証により,提案手法のCPU台数効果はシミュレーション内の空間格子数の影響を受け,粒子数密度の影響はないことが分かった.特に,各スレッドに割り当てられた空間格子配列がキャッシュに収まりきる程度に細分化される場合,並列台数効果を得やすいことを明らかにした.特に並列台数10前後の場合,その台数効果はスーパリニアとなり,自動並列化コンパイラを用いた電流ルーチン実装に比べて高速になることを明らかにした.また,本提案手法は,各スレッドで全粒子を走査する冗長的な並列化方法であるため,従来アルゴリズムで用いられていた作業領域用配列は不要となり,シミュレーションに必要なメモリ容量を大幅に節約できることを示した.In Particle-In-Cell (PIC) plasma simulations, we calculate the current density to advance the electromagnetic fields. One of the ways to obtain the current density is to gather the velocity moment of each particle to the adjacent grid points. The current calculation is not basically parallelized because the particle positions, which are random in the simulation space, are independent of the array number of current density. In the present paper, we propose a new parallelization method which explicitly associates particles to threads by using OpenMP and evaluate the performance of the proposed method. We clarified that the scalability performance is affected by the number of spatial grid points and is independent of the number of particle per grid. In the proposed method, each thread is in charge of a part of the array of current density divided with the number of thread. When the memory size of the array allocated to each thread becomes small and close to the data cache size of CPU, we found that the scalability performance shows super-linear characteristics and the execution needs less time than the case of using the automatic parallelization compiler. In addition, each thread redundantly scans the particle array to obtain the information of the particle positions for assigning the corresponding particles in charge. Because of this redundant parallelization, we do not have to use work arrays and can save the memory consumed for simulations.