GPU 확장 FORTRAN과 C의 성능 비교 푸리에 의사스펙트럼 알고리즘 벤치마크
초록
본 논문은 Fourier 의사스펙트럼 알고리즘을 대상으로 PGI OpenACC, FORTRAN CUDA, Nvidia CUDA 세 가지 GPU 구현과 GCC FORTRAN 기반 CPU 구현을 비교한다. GPU 구현은 CuFFT, CPU 구현은 FFTW를 사용했으며, 단일 GPU와 다중 CPU 코어에서의 실행 시간을 측정한다. 결과는 OpenACC와 CUDA FORTRAN이 기존 FORTRAN 코드를 손쉽게 GPU로 이식할 수 있음을 보여주며, GPU가 동일 문제에 대해 CPU보다 10배 이상 빠른 성능을 달성한다는 점을 강조한다.
상세 분석
이 연구는 Fourier 의사스펙트럼 방법을 이용한 1차원·2차원·3차원 문제를 표준 벤치마크 세트로 구성하고, 각 문제에 대해 네 가지 구현 방식을 실험한다. 첫 번째는 PGI 컴파일러가 제공하는 OpenACC 지시자를 활용한 포트이며, 코드 변경량이 최소화되는 것이 특징이다. 두 번째와 세 번째는 각각 PGI Fortran CUDA와 Nvidia CUDA C를 사용한 저수준 구현으로, 메모리 전송과 커널 호출을 직접 제어한다. 마지막으로 CPU 측면에서는 GCC Fortran으로 작성된 코드에 FFTW 라이브러리를 연결해 단일 코어와 OpenMP 기반 다중 코어 실행을 평가한다.
GPU 구현은 모두 CuFFT를 이용해 고성능 FFT를 수행했으며, CuFFT의 내부 스레드 블록 배치와 메모리 정렬 최적화가 전체 실행 시간의 60~70%를 차지한다. OpenACC 구현은 기존 Fortran 루프에 #pragma acc parallel loop와 데이터 영역 지정만 추가하면 되므로, 개발 비용이 현저히 낮다. 반면 CUDA Fortran과 CUDA C는 스레드 블록 크기, 공유 메모리 사용, 스트림 동기화 등을 세밀하게 튜닝해야 하지만, 최적화된 경우 최고 15% 정도의 추가 속도 향상을 얻을 수 있다.
CPU 측면에서는 FFTW의 멀티스레드 플랜이 효율적으로 작동해 코어 수가 증가함에 따라 거의 선형에 가까운 스케일링을 보였지만, 메모리 대역폭 한계와 캐시 효율성 때문에 GPU 대비 8~12배 정도 느렸다. 특히 3차원 대규모 격자(예: 1024³)에서는 GPU 메모리 용량 제한이 성능 병목을 일으키지만, 메모리 압축 및 스트리밍 기법을 적용하면 해결 가능함을 논의한다.
전체적인 결론은, 기존 Fortran 기반 과학 코드가 GPU 가속을 필요로 할 때 OpenACC가 가장 빠른 이식성을 제공하고, 성능 면에서는 CUDA 기반 구현이 약간 우위에 있다. 또한, CuFFT와 FFTW의 성능 차이가 GPU와 CPU 간 격차의 주요 원인임을 확인한다.