[논문 리뷰] OMP2HMPP: HMPP Source Code Generation from Programs with Pragma Extensions
OMP2HMPP는 OpenMP 확장 C 코드를 GPGPU 가속을 위한 HMPP 호환 코드로 자동으로 변환하는 소스 투 소스 컴파일러이며, 변수 수명 주기와 데이터 종속성을 분석하기 위해 Mercurium 프레임워크를 활용한다. 순차적 실행 대비 평균 113×의 속도 향상을 달성하고 수작업 최적화된 HMPP 버전과 거의 동일한 코드를 생성하여 HPC 및 임베디드 GPU 환경에서 이식 가능한 고성능 계산을 가능하게 한다.
High-performance computing are based more and more in heterogeneous architectures and GPGPUs have become one of the main integrated blocks in these, as the recently emerged Mali GPU in embedded systems or the NVIDIA GPUs in HPC servers. In both GPGPUs, programming could become a hurdle that can limit their adoption, since the programmer has to learn the hardware capabilities and the language to work with these. We present OMP2HMPP, a tool that, automatically trans-lates a high-level C source code(OpenMP) code into HMPP. The generated version rarely will differs from a hand-coded HMPP version, and will provide an important speedup, near 113%, that could be later improved by hand-coded CUDA. The generated code could be transported either to HPC servers and to embedded GPUs, due to the commonalities between them.
연구 동기 및 목표
- OpenMP 확장 C 코드를 HMPP 지시어로 자동 변환함으로써 GPGPU 프로그래밍의 복잡성을 줄이기.
- 수작업 최적화된 버전과 성능 및 구조에서 유사한 HMPP 최적화 코드를 생성하기.
- HPC 서버와 임베디드 GPU를 포함한 이종 아키텍처 간에 GPGPU 응용 프로그램의 이식성 제공하기.
- 저수준 GPU 프로그래밍 모델에 숙련된 전문 지식이 없는 개발자에게 성능 최적화된 기초 코드 제공하기.
- 향후 Par4All 등의 도구와의 통합을 통해 순차적 C/C++ 코드에서부터 종단 간 자동 병렬화를 탐색하기.
제안 방법
- BSC Mercurium 소스 투 소스 컴파일 프레임워크를 사용하여 입력된 OpenMP C 코드를 구문 분석하고, 추상 구문 트리(_ASTs_)와 심볼 테이블을 추출한다.
- 정적 분석을 수행하여 OpenMP 병렬 영역 내에서 변수의 범위, 활성 상태 및 데이터 접근 패턴을 결정한다.
- HMPP 지시어—예를 들어 callsite, codelet, group, advancedload, delegatestore, synchronize, release, noupdate, target—를 적용하여 OpenMP 영역을 GPU 커널으로 매핑한다.
- noupdate 및 advancedload를 사용하여 중복 업로드 및 다운로드를 방지함으로써 데이터 전송을 최적화한다. 특히 다수의 커널에서 사용되는 변수에 대해 유의미하다.
- 의존성이 허용되는 경우 GPU 커널을 비동기적으로 실행하여 동시성 향상과 지연 숨기기를 개선한다.
- CUDA 및 향후 OpenCL 대상 모두를 지원하는 HMPP 호환 C 코드를 생성하여 GPU 플랫폼 간 이식성 확보한다.
실험 결과
연구 질문
- RQ1소스 투 소스 컴파일러가 성능 저하를 최소화하면서 OpenMP 확장 C 코드에서 자동으로 HMPP 호환 코드를 생성할 수 있는가?
- RQ2자동으로 생성된 HMPP 코드가 수작업 최적화된 HMPP 구현과 성능 및 구조에서 얼마나 유사한가?
- RQ3생성된 코드가 HPC 및 임베디드 GPU 플랫폼 양쪽에서 얼마나 높은 속도 향상을 달성할 수 있는가?
- RQ4데이터 전송 최소화 및 비동기 실행과 같은 최적화 기법들이 번역 과정에서 자동으로 적용될 수 있는가?
- RQ5생성된 코드의 성능이 순차적, OpenMP, 수작업 CUDA 버전과 비교해 어떻게 되는가?
주요 결과
- OMP2HMPP는 테스트된 HPC 및 임베디드 GPU 플랫폼에서 순차적 버전 대비 평균 113×의 속도 향상을 달성한다.
- 생성된 코드는 원본 OpenMP 버전 대비 평균 31× 이상의 속도 향상을 기록하여 뚜렷한 성능 향상을 입증한다.
- 생성된 HMPP 코드의 성능은 수작업 최적화된 버전과 거의 구분되지 않으며, 구조적 차이와 데이터 이동 패턴에서 미미한 차이만 존재한다.
- noupdate 및 advancedload 지시어를 활용하여 데이터 전송 오버헤드를 효과적으로 줄여 중복 업로드 및 다운로드를 방지한다.
- 생성된 코드는 NVIDIA Tesla GPU를 탑재한 HPC 서버와 임베디드 시스템 내의 Mali GPU를 포함한 이종 아키텍처 간에 이식 가능하다.
- 대부분의 벤치마크에서 생성된 코드의 성능은 수작업 CUDA 버전의 1.7배 이내에 머무르며, 향후 최적화 잠재력이 높음을 시사한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.