멀티코어 기반 시스템에서 OpenMP와 TBB를 이용한 작업 병렬 실행을 위한 ccNUMA 지역성 최적화

멀티코어 기반 시스템에서 OpenMP와 TBB를 이용한 작업 병렬 실행을 위한 ccNUMA 지역성 최적화
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 OpenMP task와 Intel TBB의 동적 작업 스케줄링이 ccNUMA 환경에서 데이터 지역성 저하를 초래하는 문제를 해결하고자, 작업을 로컬리티 큐에 할당해 동일한 NUMA 도메인 내 스레드가 우선 처리하도록 하는 경량 소프트웨어 계층을 제안한다. 도메인 내부에서는 동적 스케줄링을 유지하면서도, 비지역 접근이 필요할 경우 로드 밸런스를 우선시한다. 6점 스텐실 블록 행렬 연산을 실험 모델로 사용해 성능 향상을 입증한다.

상세 분석

이 연구는 현대 멀티코어·멀티소켓 시스템에서 메모리 대역폭이 병목이 되는 경우가 많다는 점에 착안한다. 특히 ccNUMA(캐시 코히어런트 비균일 메모리 접근) 구조에서는 동일한 로컬리티 도메인(LD) 내에서 메모리를 접근할 때 대역폭과 지연시간이 최적화되지만, OpenMP task와 TBB와 같은 동적 작업 분배 메커니즘은 작업을 무작위로 스레드에 할당한다. 결과적으로 작업이 원격 NUMA 노드의 메모리를 자주 접근하게 되어 메모리 대역폭이 급격히 감소하고, 전체 실행 시간이 늘어난다.

논문은 이러한 현상을 완화하기 위해 “로컬리티 큐”라는 개념을 도입한다. 작업 생성 시, 작업이 접근할 데이터 블록이 어느 NUMA 도메인에 위치하는지를 사전에 판단하고, 해당 도메인에 전용 큐를 만든다. 각 도메인에 속한 스레드들은 우선 자신이 속한 큐에서 작업을 꺼내 실행한다. 큐 내부에서는 기존 OpenMP의 schedule(dynamic) 혹은 TBB의 parallel_for와 유사한 동적 스케줄링을 유지해 작업 부하가 고르게 분산된다. 만약 특정 도메인에 남은 작업이 없고 다른 도메인에 작업이 남아 있다면, 스레드는 비록 원격 메모리 접근이 발생하더라도 작업을 가져와 실행한다. 이는 “로드 밸런스 우선” 정책으로, 전체 실행 시간이 최소화되는 방향을 보장한다.

핵심 구현은 매우 얇은 레이어에 머물며, 기존 코드에 최소한의 API 호출만 추가하면 된다. OpenMP에서는 #pragma omp task#pragma omp taskwait 사이에 로컬리티 큐 삽입 함수를 호출하고, TBB에서는 tbb::task_arenatbb::task_group을 활용해 큐를 관리한다. 또한, NUMA 토폴로지를 탐지하기 위해 hwloc 라이브러리를 사용해 각 스레드와 메모리 페이지의 매핑 정보를 획득한다.

실험에서는 2소켓·12코어(각 소켓 6코어) Xeon 시스템을 대상으로 3차원 6점 스텐실 연산을 블록화하여 작업 단위로 만든다. 기존 동적 스케줄링만 적용했을 때와 비교했을 때, 로컬리티 큐를 도입한 경우 평균 18%~22%의 실행 시간 감소를 기록한다. 특히, 블록 크기가 작아 작업 수가 많아질수록 비지역 접근 비율이 증가하는 상황에서도 성능 이득이 유지된다. 이는 로컬리티 큐가 작업 부하를 균등히 분산하면서도 NUMA 친화적인 메모리 접근을 촉진한다는 것을 실증한다.

이와 같이 논문은 동적 작업 스케줄링과 NUMA 지역성 사이의 트레이드오프를 효과적으로 조정하는 방법을 제시한다. 구현이 간단하고 기존 코드와의 호환성이 높아, 메모리 대역폭이 주요 제한 요소인 과학·공학 시뮬레이션, 데이터 분석 파이프라인 등에 바로 적용 가능하다.


댓글 및 학술 토론

Loading comments...

의견 남기기