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.ThreadsPolyester.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에서 약한 스케일링을 지원합니다.
  • 개발자 친화적: 스텐실 연산에 수학적 구문을 제공하고, 런타임에 하드웨어 선택이 가능하여 인터랙티브 프로토타이핑에 적합합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트