내용 |
최근 몇년간 전세계 수퍼컴퓨터의 디자인은 GPU (Graphics Processing Unit)이나 Xeon Phi MIC (Many Integrated Core) 같은 Accelerator의 장착이 필수요소로 자리 잡은 상황이다. GPU 등 accelerator들은 Linpack benchmark 를 통한 최고성능 측정에 무척 중요한 역할을 하지만, 일반 사용자의 입장에서는 이 accelerator 의 충분한 활용이 그리 쉽지않은 상황이다. GPU 활용을 위해선 CUDA 프로그래밍을 배워야 해서 진입장벽이 높기 때문이다. OpenACC 는OpenMP 와 같이 컴파일러 derivative 를 사용하기 때문에 GPU 이용을 위한 프로그래밍을 훨씬 쉽게 해준다. 이 연구에서는 Nek5000라는 잘 알려진 열유체 해석 프로그램에 OpenACC를 적용, GPU 를 사용해 실행을 했을경우 얼마나 성능개선이 이루어 지는지 살펴보았다. Nek5000같은 열유체 해석 프로그램들은기존의 GPU application으로 잘 알려져있는 Lattice-Boltzman application들 보다 훨씬 더 강도높은 컴퓨팅을 요구하며, 각 프로세스간의 정보교환도 훨씬 더 잦은 편이라 병렬 프로그램밍을 통한 scale-up 이 쉽지않은 대표적인 프로그램이다. 이번 실험은 Oak Ridge National Lab 에서 보유하고 있는 Titan (Cray XK6) Supercomputer (2.1GHz AMD Interlago 16-core CPU Kepler K-20 GPU on node) 에서 이루어 졌으며, single node 에서 시작, 1024 core 까지 MPI (Message Passing Interface) 를 이용한 병렬 계산으로 이루어 졌다. 실질적인 benchmark test 는 NekBone 이라는 Nek5000의 scale-down version 으로 진행되었다. OpenACC를 사용하지 않은 CPU 만을 이용한 기존 코드 테스트에선 16.27 Gflops의 성능을 보인 반면, 간단한 OpenACC 사용에선 20.56Gflops, 여기에 CPU-GPU 사이의 data processing 을 최적화 시킨 optimized version 으로는 42.67Gflops 의 성능을 보여, OpenACC 가 고성능 컴퓨팅 환경에서 GPU 이용을 위한 도구로서 훌륭한 역할을 할 수 있음을 보여주었다. 또한 1024개의 GPU 를 이용한 테스트에서도 79.9%의 병렬 효율성 (parallel efficiency)을 보여 CUDA programming 못지않은 효용성을 보였다는 점도 상당히 고무적이다. 아직까진 OpenACC의 사용자 수가 그리 많지 않은 편 이지만, 배우기 쉽고 일반 코드에 쉽게 적용시킬 수 있다는 점 등 매력적인 부분이 많아 시간이 지날 수 록 더 많은 사용자를 끌어들일 것으로 기대된다. |