공지사항
초고성능컴퓨팅 소식지(2025년 9월호)
등록일: 2025.10.16
작성자: 관리자

초고성능컴퓨팅 소식 및 행사
칼럼
[칼럼] OpenMP under the hood: 컴파일러와 런타임의 관점
OpenMP는 1990년대에 제안된 이후 프라그마(pragma) 기반의 직관적인 프로그래밍 인터페이스를 기반으로 Fortran과 C/C++에서 널리 쓰이는 대표적인 공유 메모리 병렬 프로그래밍 모델로, 슈퍼컴퓨터 초창기부터 계산과학 및 공학 시뮬레이션 분야의 병렬화를 주도해 왔다. OpenMP의 성공에는 사용하기 쉬운 프로그래밍 모델뿐 아니라, 높은 병렬 성능을 효율적으로 확보할 수 있는 컴파일러와 런타임의 지원이 중요한 요소로 작용한다. OpenMP 프로그램은 사용자가 추상화된 디렉티브(directive)와 환경 변수로 병렬 영역을 선언하고 실행 환경을 정의하면, 컴파일러가 이들을 구체화한 코드를 생성하고 런타임 라이브러리가 실행 시 동작을 제어하게 된다. 이렇게 작성된 OpenMP 프로그램의 성능은 “프로그래머가 무엇을 어떻게 병렬화할지 표현한 의도”와 “OpenMP 컴파일러와 런타임이 그 표현을 코드와 실행으로 구체화하는 방법”의 상호작용으로 결정된다. 이 과정에서 추상화가 높아질수록 구현은 쉬워지지만, 생성 코드의 세부를 직접 통제하기는 어려워지는 특유의 트레이드오프가 따르게 된다. 컴파일러는 스레드 생성(parallel), 워크셰어링(for, task), 데이터 스코핑(private, shared, reduction), 동기화 호출(atomic, barrier) 등을 표현하는 OpenMP 디렉티브와 클로즈(clause)를 해석하여 그에 해당하는 코드를 생성한다. 장치 디렉티브(target)가 사용되면, 장치에 오프로딩할 커널 코드와 이를 호출하는 호스트 코드를 함께 만든다. 대부분의 컴파일러(예: clang/LLVM, GCC, ICC 등)가 early outlining 방식을 사용하여 컴파일 초기에 OpenMP 구문을 별도의 함수로 분리하기 때문에, 함수 경계를 넘는 최적화(inter-procedural optimization)가 적용되지 않으면 성능이 제한될 수 있다. 따라서 변수의 공유 속성을 명시적으로 선언하고, 불필요한 함수 경계를 줄이는 등 기존 함수 단위의 컴파일러 최적화에 우호적인 형태로 코드를 작성하는 것이 중요하다. 런타임은 컴파일러가 생성한 병렬 코드가 실행되는 동안 스레드 풀 관리, 스케줄링, 동기화, 데이터 매핑 및 장치 오프로딩 관리 등의 역할을 수행한다. 특히 OpenMP 4.0 이후에 GPU 및 가속기와 같은 “장치(device)”로 코드를 오프로딩하여 가속하는 디렉티브가 추가되면서, GPU의 계층적인 병렬 구조(teams-distribute-parallel-simd)를 반영하는 커널 코드 생성 및 실행 모델이 추가되었다. 이때 CPU-GPU 간 데이터 전송, 커널 생성과 동기화, 의존성 처리 등 런타임의 관리 효율이 성능에 직접적인 영향을 준다. 아울러 GPU의 하드웨어 구조적 특성을 고려해 데이터 병렬성을 극대화하는 방식으로 커널을 생성하는 컴파일러의 최적화 성능 차이도 크다. 동일한 OpenMP GPU 코드에 대해서도 컴파일러 구현(GCC, Clang, NVHPC, Cray 등)에 따라 성능 차이가 최대 수배 이상 발생한다는 연구 결과는, 컴파일러의 구현 방식이 성능에 얼마나 결정적인 영향을 미치는지 보여준다. 실전에서 고성능을 얻으려면 이러한 코드 생성 및 실행 메커니즘을 염두에 둔 코드 작성이 필요하다. CPU에서는 작업의 크기를 충분히 키워 병렬 오버헤드를 상쇄하고, 동적 스케줄링으로 부하 불균형을 완화하며, 불필요한 배리어(barrier)나 락(lock) 대신 원자적(atomic) 연산을 선택하는 기본 원칙이 유효하다. GPU에서는 데이터 이동을 최소화하기 위해 데이터 환경(target data/enter/exit)을 장기간 유지하여 매 커널 전송을 피하고, 코드와 디렉티브를 리팩터링하여 커널 내 반복문과 조건문을 단순화하고, 스레드별 메모리 접근이 연속×정렬(coalesce)되게 하여 전역 메모리 대역폭을 최대한 활용한다. 가능한 경우, 비동기 병렬화(nowait, depend)를 통해 데이터 전송과 커널 실행을 겹칠 수 있는 파이프라인을 구성한다. 이러한 프로그래밍 요령은 컴파일러가 보수적으로 코드를 생성한다는 전제를 충분히 인지하여 그로 인한 비효율을 최소화하는 데 집중하고, 프로그래머가 통제하기 어려운 런타임의 선택이 성능에 미치는 영향을 완화한다. OpenMP는 현대 이종(heterogeneous) 시스템의 공통분모로서의 역할이 커지고 있다. 표준화된 추상화 인터페이스 위에서 CPU와 GPU는 물론 NPU와 같은 도메인 가속기까지 빠르게 이식할 수 있고, 기존 컴파일러×런타임 구현을 확장하여 새로운 가속기를 표준 방식으로 지원할 수 있다. 표준 인터페이스를 유지하면서도 가속기 성능에 결정적인 역할을 하는 병렬성 극대화, 데이터 이동 최소화와 같은 최적화를 함께 추구할 수 있기 때문에, 소프트웨어 스택 구축 비용을 실질적으로 절감해 줄 수 있다. 최근에는 전통적인 CPU×GPU 업체, 국가 연구소, 슈퍼컴퓨팅 센터뿐 아니라 SiFive 등 신흥 가속기 회사들이 표준화 컨소시엄에 합류하면서, 고성능 슈퍼컴퓨팅과 AI 반도체 시대의 범용 병렬 프로그래밍 모델로서 OpenMP가 수행할 역할은 더욱 중요해질 것으로 기대된다.
서울대학교 성효진
초고성능컴퓨팅 기술동향
국내
초고성능컴퓨팅 관련 교육
  • R 활용 문헌데이터 네트워크 분석 및 가시화
    신청기간:
    2025-01-03 ~ 2025-10-05
    교육기간:
    2025-01-03 ~ 2025-10-05
  • 기술가치평가
    신청기간:
    2025-09-10 ~ 2025-09-12
    교육기간:
    2025-09-10 ~ 2025-09-12
  • SGIS 플러스(통계지리정보서비스)
    신청기간:
    2025-09-10 ~ 2025-09-10
    교육기간:
    2025-09-10 ~ 2025-09-10
  • 산업시장환경분석
    신청기간:
    2025-09-16 ~ 2025-09-16
    교육기간:
    2025-09-16 ~ 2025-09-16
  • 기술사업화와 빅데이터 활용
    신청기간:
    2025-09-17 ~ 2025-09-17
    교육기간:
    2025-09-17 ~ 2025-09-17
  • 데이터기반 기술사업 타당성 분석·평가
    신청기간:
    2025-09-18 ~ 2025-09-19
    교육기간:
    2025-09-18 ~ 2025-09-19
  • MySQL(MariaDB)기초
    신청기간:
    2025-09-29 ~ 2025-09-30
    교육기간:
    2025-09-29 ~ 2025-09-30
  • KNIME 기반 기계학습 및 딥러닝 활용
    신청기간:
    2025-09-24 ~ 2025-09-26
    교육기간:
    2025-09-24 ~ 2025-09-26
  • MySQL(MariaDB)기초
    신청기간:
    2025-09-29 ~ 2025-09-30
    교육기간:
    2025-09-29 ~ 2025-09-30
  • 슈퍼컴퓨터와 함께하는 데이터사이언스 입문
    신청기간:
    2025-09-01 ~ 2025-09-03
    교육기간:
    2025-09-01 ~ 2025-09-03
  • OpenMP(고급)
    신청기간:
    2025-09-09 ~ 2025-09-10
    교육기간:
    2025-09-09 ~ 2025-09-10
  • 성능최적화
    신청기간:
    2025-09-30 ~ 2025-10-01
    교육기간:
    2025-09-30 ~ 2025-10-01
  • HEMOS-Fluid를 통한 OpenFOAM 실전 활용
    신청기간:
    2025-09-29 ~ 2025-09-30
    교육기간:
    2025-09-29 ~ 2025-09-30
  • 데이터 과학 기초
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 딥러닝 이해하기
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 리눅스(Training Course)
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 머신러닝 기반 데이터 분석
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 분석용 데이터 탐색
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 브라이틱스(Brightics) 분석도구를 활용한 데이터 분석
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 분석 결과 시각화
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 분석 기획
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 수집 1
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 수집 2
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 처리 1
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 빅데이터 처리 2
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 사례를 통한 빅데이터 분석
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 슈퍼컴퓨터 이해와 활용
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 오픈액세스와 AccessON 활용
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 인공지능 1
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30
  • 인공지능 2
    신청기간:
    2025-09-01 ~ 2025-09-30
    교육기간:
    2025-09-01 ~ 2025-09-30

이전글 초고성능컴퓨팅 소식지(2025년 8월호)
다음글 초고성능컴퓨팅 소식지(2025년 10월호)