Skip to main content
QUICK REVIEW

[논문 리뷰] Dynamic Loop Parallelisation

Adrian Jackson, Orestis Agathokleous|arXiv (Cornell University)|2012. 05. 10.
Parallel Computing and Optimization Techniques참고 문헌 6인용 수 4
한 줄 요약

이 논문은 소스에서 소스로 컴파일러와 OpenMP 유사 지시어 기반 주석을 사용하여 중첩 루프 영역 내에서 런타임에 어떤 루프를 병렬화할지를 선택할 수 있도록 하는 동적 루프 병렬화 시스템을 제안한다. 이 방법은 정적 OpenMP if-문 방법보다 성능이 뛰어나며, 프로파일링을 통한 오토튜닝이 가능하여, 완전히 중첩되지 않거나 런타임에 변화하는 루프 환경에서 특히 유리하며, 대규모 공유 메모리 시스템에서 성능 향상이 관찰되었다.

ABSTRACT

Regions of nested loops are a common feature of High Performance Computing (HPC) codes. In shared memory programming models, such as OpenMP, these structure are the most common source of parallelism. Parallelising these structures requires the programmers to make a static decision on how parallelism should be applied. However, depending on the parameters of the problem and the nature of the code, static decisions on which loop to parallelise may not be optimial, especially as they do not enable the exploitation of any runtime characteristics of the execution including changes to the iterations of the loops to be parallelised. We have developed a system that allows a code to make a dynamic choice, at runtime, of what parallelism is applied to nested loops. Our method for providing dynamic decisions on which loop to parallelise significantly outperforms the standard methods for acheiving this through OpenMP (using if clauses).

연구 동기 및 목표

  • 런타임에 최적의 선택이 아닐 수 있는 단일 고정된 루프 병렬화 선택이 정적 OpenMP 루프 병렬화의 한계를 해결한다.
  • HPC 애플리케이션에서 워크로드가 변화하거나 완전히 중첩되지 않은 루프로 인한 성능 저하 문제를 해결한다.
  • 수동 코드 수정 없이도 런타임에 최적의 루프를 자동으로 동적으로 선택할 수 있도록 한다.
  • 실제 실행 특성에 기반해 병렬화 전략을 조정함으로써 대규모 공유 메모리 시스템(100~1000개 이상의 코어)에서의 확장성을 향상시킨다.
  • 소스에서 소스로 컴iles를 사용하고 경량 런타임 라이브러리를 활용하여 사용자에게 투명한 실용적인 시스템을 개발한다.

제안 방법

  • 중첩 루프 영역 내의 루프를 자동으로 여러 버전으로 생성하는 소스에서 소스로 컴파일러를 사용하며, 각 버전은 병렬화 대상이 될 수 있음을 나타내는 지시어로 주석 처리된다.
  • 프로그래머가 각 루프 수준에 대해 병렬화 전략의 대안을 지정할 수 있도록 지시어 기반 인터페이스(OpenMP 유사)를 도입한다.
  • 성능 히ュ리스틱과 프로파일링 데이터를 평가하여 실행 시점에 어떤 루프 버전을 병렬로 실행할지 결정하는 런타임 라이브러리를 구현한다.
  • 내부 루프 카운팅을 피하기 위해 비용이 많이 드는 작업을 제거하기 위해 루프 반복 횟수와 타이밍만 기록하는 완화된 프로파일링 메커니즘을 적용한다.
  • 코드 중복을 성능 최적화 수단으로 사용하여 런타임 분기 오버헤드 없이 병렬화 선택에 따라 별도의 실행 경로를 제공한다.
  • 히ュ리스틱 기반 선택과 프로파일링 기반 결정 사이에서 선택하는 결정 함수를 통합하며, 히ュ리스틱이 실패할 경우에만 프로파일링을 활성화한다.

실험 결과

연구 질문

  • RQ1변동하거나 비정상적인 워크로드 상황에서 런타임에 동적 루프 병렬화가 정적 OpenMP if-문 방법보다 성능이 뛰어나게 되는가?
  • RQ2프로파일링 오버헤드는 동적 루프 선택 성능에 어떤 영향을 미치며, 결정 정확도를 훼손하지 않고도 이를 줄일 수 있는가?
  • RQ3정적 선택이 열등한 비완전히 중첩된 루프 영역에서 동적 루프 선택이 성능 향상에 얼마나 기여하는가?
  • RQ4소프트웨어 공학에서 일반적으로 코드 스멜로 간주되는 다중 루프 버전을 위한 자동 코드 중복이 성능 향상에 기여하는가?
  • RQ5경량 지시어 기반 시스템이 주요 코드 재구성 없이 최소한의 프로그래머 노력으로 효과적인 오토튜닝을 달성할 수 있는가?

주요 결과

  • 동적 루프 병렬화 시스템은 특히 변동하거나 비정상적인 워크로드 상황에서 표준 OpenMP if-문 방법보다 뚜렷이 뛰어난 성능을 보였다.
  • 완화된 프로파일링 메커니즘이 내부 루프 반복 수 계산을 제거하여 오버헤드를 줄였으며, 이로 인해 결정 시간이 단축되고 성능 향상이 이루어졌으며, 특히 스레드 수가 많을수록 유리했다.
  • 정적 if-문 방법이 실패한 경우(예: CFD 벤치마크에서 12 및 16개 스레드에서) 동적 시스템은 최적의 루프를 정확히 선택했다.
  • 프로파일링 오버헤드가 존재하더라도 동적 접근 방식은 히ュ리스틱 전용 결정과 비교해 유사한 성능을 달성하여 실용성의 가능성을 입증했다.
  • 일반적으로 금지되는 코드 중복이 이 맥락에서는 병렬 영역 내부 오버헤드를 제거하고 효율적인 런타임 선택을 가능하게 하여 유리한 성능을 보였다.
  • 대규모 공유 메모리 시스템에서 확장성과 적응성의 잠재력을 입증하여, 향후 100~1000개 이상의 코어를 갖는 HPC 워크로드에 매우 유망한 것으로 보인다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.