[論文レビュー] High Performance Implementation of Boris Particle Pusher on DPC++. A First Look at oneAPI
本稿では、最適化されたC++コードから移植されたHi-Chiフレームワーク向けの高パフォーマンスDPC++実装であるBoris粒子プッシュアルゴリズムを提示し、Intel Xeon CPU(平均で約10%遅延)ではほぼ同一の性能を示し、Intel GPU(例:Iris Xe MaxではSoAレイアウトで1.00 NSPSを達成)では予想を上回る初期段階でのパフォーマンスを示す。これは、1つAPIが、広範なGPU特化最適化を施さずに、異種アーキテクチャ間で移植可能な高パフォーマンスなプラズマシミュレーションコードを実現する可能性を裏付けている。
New hardware architectures open up immense opportunities for supercomputer simulations. However, programming techniques for different architectures vary significantly, which leads to the necessity of developing and supporting multiple code versions, each being optimized for specific hardware features. The oneAPI framework, recently introduced by Intel, contains a set of programming tools for the development of portable codes that can be compiled and fine-tuned for CPUs, GPUs, FPGAs, and accelerators. In this paper, we report on the experience of porting the implementation of Boris particle pusher to oneAPI. Boris particle pusher is one of the most demanding computational stages of the Particle-in-Cell method, which, in particular, is used for supercomputer simulations of laser-plasma interactions. We show how to adapt the C++ implementation of the particle push algorithm from the Hi-Chi project to the DPC++ programming language and report the performance of the code on high-end Intel CPUs (Xeon Platinum 8260L) and Intel GPUs (P630 and Iris Xe Max). It turned out that our C++ code can be easily ported to DPC++. We found that on CPUs the resulting DPC++ code is only ~10% on average inferior to the optimized C++ code. Moreover, the code is compiled and run on new Intel GPUs without any specific optimizations and shows the expected performance, taking into account the parameters of the hardware.
研究の動機と目的
- 高パフォーマンスなC++粒子プッシュを、1つAPIのDPC++を用いて異種コンピューティングに移植する可能性とパフォーマンスを評価すること。
- DPC++実装のIntel CPUおよびGPU上のパフォーマンスを、手動最適化されたC++バージョンと比較すること。
- DPC++におけるデータレイアウト(AoS対SoA)およびNUMA対応メモリアクセスがパフォーマンスに与える影響を評価すること。
- DPC++が、広範なGPU特化最適化を施さずに、CPUとGPU間で移植可能な高パフォーマンスコードを実現できるかどうかを特定すること。
提案手法
- oneAPIプログラミングモデルを用いて、Hi-Chiフレームワークから最適化済みC++粒子プッシュ実装をDPC++に移植した。
- OpenMPベースの並列処理を、SYCLを基盤とするDPC++構文を用いたoneDNN風の並列カーネルに置き換えた。
- CPUおよびGPUにおけるメモリアクセスパターンの評価のため、AoS(構造体の配列)およびSoA(配列の構造体)の両方のデータレイアウトを採用した。
- マルチソケットCPUにおけるキャッシュ局所性とメモリ帯域幅の最適化を目的として、DPC++コードにNUMA対応メモリアクセスを設定した。
- ハイエンドIntel Xeon Platinum 8260L CPUおよびIntel P630/Iris Xe Max GPUにおいて、単精度および倍精度でパフォーマンスベンチマークを実行した。
- CPUおよびGPUのターゲット間で同一の計算カーネルを用いることで、移植性およびパフォーマンスの移植可能性を評価した。
実験結果
リサーチクエスチョン
- RQ1最小限の変更と許容可能なパフォーマンス損失で、高パフォーマンスC++粒子プッシュをDPC++に効果的に移植できるか?
- RQ2GPU特化最適化を一切施さない状態で、DPC++実装は最適化済みCPUコードに比べてIntel GPU上でどの程度のパフォーマンスを示すか?
- RQ3DPC++におけるデータレイアウト(AoS対SoA)がCPUおよびGPUでのパフォーマンスに与える影響は何か?
- RQ4NUMA対応メモリアクセスは、マルチソケットCPUにおけるDPC++パフォーマンスをどの程度向上させるか?
- RQ5oneAPIは、広範な再作業を要せず、CPUとGPU間で移植可能な高パフォーマンスHPCコードを実現できるか?
主な発見
- Intel Xeon Platinum 8260L CPUにおけるDPC++実装は、手動最適化済みC++コードと比較して平均で約10%遅延するが、パフォーマンス損失が最小限であることを示し、効果的な移植が可能であることを裏付けた。
- DPC++コードは、48コアで最大63%のスケーリング効率を達成し、優れた並列処理およびNUMA対応メモリアクセスを示している。
- Intel Iris Xe Max GPUでは、単精度でSoAレイアウトで1.00ナノ秒/粒子/ステップ(NSPS)を達成し、未最適化ポートとしては予想を上回るパフォーマンスを示した。
- GPUではAoSとSoAのパフォーマンス差が50%以上にのぼり(例:Iris Xe Maxでは2.10対1.00 NSPS)、GPUメモリアクセスパターンにおけるデータレイアウトの重要性を強調している。
- GPU特化最適化が欠如しているにもかかわらず、P630およびIris Xe Max GPUにおけるDPC++コードは、ハイエンドCPUと比較してそれぞれ3.5–4.5倍および1.7–2.6倍遅延しており、さらなる最適化の余地が大きいことを示している。
- 結果から、oneAPIおよびDPC++は、最小限の初期移植作業と新規Intel GPUアーキテクチャにおける有望なパフォーマンスを伴い、CPUおよびGPU間で移植可能な高パフォーマンスHPCコードの実現を可能にしていることが確認された。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。