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,來平行化與最佳化函數。它利用現有的後端,如 CUDA.jlAMDGPU.jlMetal.jlKernelAbstractions.jl 用於 GPU,以及 Base.ThreadsPolyester.jl 用於 CPU。

主要功能包括:

  • 接近數學的語法:專用子模組(FiniteDifferences1D2D3D)提供 @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 上實現弱擴展性。
  • 開發者友善:提供類似數學的捲積操作語法,並支援執行階段硬體選擇,非常適合互動式原型開發。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案