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.jl、AMDGPU.jl、Metal.jl 和 KernelAbstractions.jl 用于 GPU,以及 Base.Threads 和 Polyester.jl 用于 CPU。
主要特性包括:
- 贴近数学的记法:专用子模块(
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 上实现弱扩展性。 - 开发者友好:提供类似数学的卷积操作语法,并支持运行时硬件选择,非常适合交互式原型开发。
相关
- 项目
- 项目
- 项目
- 项目
- 项目