omlins/ParallelStencil.jl
Package for writing high-level code for parallel high-performance stencil computations that can be deployed on both GPUs and CPUs
何を解決するか
ParallelStencil.jl は、ドメインサイエンティストが異なるハードウェアアーキテクチャ向けの低レベルコードを書く必要なく、高性能な並列ステンシル計算を記述できるようにします。Juliaの高レベルコードとCUDA CやHIPのパフォーマンスのギャップを埋め、同じコードをCPUおよびさまざまなGPU(Nvidia、AMD、Apple Metal)に最小限の努力でデプロイできるようにします。
動作方法
このライブラリは主に @parallel マクロを用いて関数を並列化および最適化します。GPU用には CUDA.jl、AMDGPU.jl、Metal.jl、KernelAbstractions.jl といった既存のバックエンドを活用し、CPU用には Base.Threads と Polyester.jl を使用します。
主な特徴:
- 数学に近い記法:専用のサブモジュール(
FiniteDifferences1D、2D、3D)が@innや@d2_xiといったマクロを提供し、有限差分方程式を数学的記法に近い構文で記述可能にします。 - メモリ最適化:
@parallelにおけるmemopt=true引数により、レジスタおよび共有メモリの自動最適化が可能になります。 - ハードウェア非依存性:一度バックエンドを初期化すれば、
KernelAbstractions.jlを使って実行時にハードウェアターゲットを切り替えることができ、カーネルの再定義は不要です。 - 分散スケーラビリティ:
ImplicitGlobalGrid.jlとの相互運用性により、数千のGPU/CPUsにわたる大規模なアプリケーションをサポートし、通信オーバーヘッドを計算で隠蔽する機能も備えています。 - 自動微分:
Enzyme.jlを通じて並列カーネルの自動微分をサポートしています。
対象ユーザー
GPUアクセラレーションとマルチノードスケーリングが必要だが、アーキテクチャ固有のカーネルコードを書く複雑さを避けたい、高性能数値シミュレーション(例:熱拡散、ポロヒドロメカニカル応用)を行うドメインサイエンティストや研究者向けに設計されています。
主な特長
- 高性能:理論的なGPUパフォーマンスの上限の最大70%を達成でき、標準的なGPU配列プログラミングを大幅に上回ります。
- クロスプラットフォーム:CPU、Nvidia GPU、AMD GPU、Apple Metalのための単一コードベースを提供します。
- 大規模スケーラビリティ:
ImplicitGlobalGrid.jlと組み合わせることで、数千のGPUでの弱スケーリングをサポートします。 - 開発者フレンドリー:ステンシル操作に数学的な記法を提供し、実行時にハードウェア選択が可能なため、インタラクティブなプロトタイピングに最適です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト