체 C++ 병렬 프로그래밍 시스템

Sieve C++ Parallel Programming System

C++ 병렬 프로그래밍 시스템은 Codeplay에 의해 설계되고 출시된 C++ 컴파일러 및 병렬 런타임으로, 멀티 프로세서 또는 멀티 코어 시스템에서 효율적으로 실행될 수 있도록 코드의 병렬화를 단순화하는 것을 목표로 합니다.OpenMP, RapidMind Development Platform 및 스레드화 빌딩 블록(TBB)과 같이 잘 알려진 다른 병렬화 방법을 대체하는 것입니다.

서론

C++ 컴파일러는 C++ 컴파일러로, 시리얼 코드의 일부에 체 마커로 주석을 달아 자동으로 병렬화합니다.프로그래머는 병렬화할 코드를 'sieve'로 태그가 지정된 어휘 범위 내에 래핑합니다.일반적으로 '시브 블록'이라고 불리는 이 범위에는 특정 규칙이 적용됩니다 [1].

  • 체 블록 내의 모든 부작용은 스코프가 끝날 때까지 지연됩니다.
  • 부작용은 체 블록 범위 밖에서 선언된 데이터에 대한 수정으로 정의됩니다.
  • sheve 또는 immediate로 주석이 달린 함수만 호출할 수 있습니다.

부작용을 지연시키면 일반적으로 자동 병렬화를 방해하는 많은 작은 의존성을 제거할 수 있습니다.읽기 및 쓰기는 컴파일러에 의해 안전하게 재배치되어 Direct Memory Access(DMA; 다이렉트 메모리 액세스) 등의 다양한 데이터 이동 메커니즘을 보다 효율적으로 사용할 수 있습니다.또한 별칭 분석 및 데이터 흐름 분석을 단순화할 수 있습니다 [2].그러면 컴파일러는 병렬 처리를 이용하기 위해 훨씬 쉽게 체 블록 내에서 코드를 분할할 수 있습니다.

메모리 구성

이러한 스코프의 분리는 또한 Sieve 시스템을 불균일한 메모리 아키텍처에서 사용할 수 있음을 의미합니다.PlayStation 3에서 사용되는 Cell 마이크로프로세서 등의 멀티코어 CPU는 고속코어에 로컬메모리가 탑재되어 있어 시스템 고유의 퍼포먼스를 이용할 필요가 있습니다.또한 x86과 같은 공유 메모리 시스템에서도 작동할 수 있습니다. 즉, 다양한 아키텍처에서 실행할 수 있습니다.서로 다른 메모리 및 처리 요소의 계층 구조를 가진 시스템에 대해 체 블록이 [3] 중첩될 수도 있습니다.

병렬화와 확장성

체 컴파일러는 체 블록 내의 코드를 암묵적으로 또는 명시적으로 '분할' 문을 통해 청크로 분할할 수 있습니다.예를 들어, 다음 예에서는 루프를 병렬화하는 방법을 보여 줍니다.

 체에 밭치다  {     위해서 (리터레이터 i(0); i< >길이; ++i)     {        R[i] = A[i] * B[i]           분할하다;     }  } 

컴파일러는 for loop constructure body 위에 스플릿포인트를 엔트리로 암묵적으로 추가합니다.마찬가지로 출구점으로서 뒤에 1개가 추가됩니다.

Sieve System에서는 sieve block 스코프에 대한 로컬 변수만 종속성을 가질 수 있습니다.단, 이러한 의존관계는 분할점을 넘어서는 안 됩니다.컴파일러[citation needed] 경고가 생성됩니다.이 루프를 병렬화하기 위해 표준 정수 루프 카운터 대신 특별한 '반복기' 클래스를 사용할 수 있습니다.병렬화에 안전하며 프로그래머는 자유롭게 새로운 반복자 클래스를 만들 수 있습니다[4].이러한 반복기 클래스 외에도 프로그래머는 축소 연산을 수행하기 위해 사용되는 '어큐뮬레이터'라고 불리는 클래스를 자유롭게 구현할 수 있습니다.

Iterator 클래스가 구현되는 방식은 확장성을 위한 다양한 수단을 제공합니다.Sieve Parallel Runtime은 타깃 플랫폼에서 실행할 때 동적 추측 실행을 사용합니다.이것은 매우 좋은 속도 향상을 가져올 수 있지만, 단일 코어 머신에서 실행되면 오버헤드가 발생할 수 있습니다[5].

결정론

결정론은 체계의 특이한 특징이다.멀티코어 머신에서 병렬 Sieve 프로그램을 실행하면 버그가 발생할 경우 디버깅을 지원하기 위해 싱글코어로 실행해도 버그가 사라지지 않습니다[6][7].이는 동시 프로그래밍에서 가장 일반적인 버그 중 하나인 레이스 조건을 제거할 수 있는 장점이 있습니다.체 블록 내에서 동시성 제어 구조를 고려할 필요성을 없애면 개발 시간을 단축하고 코드를 더 안전하게 만들 수 있습니다.

지원되는 시스템

이 시스템은 로컬 메모리를 가진 동종 또는 이종 CPU 코어를 갖춘 계층 기반 시스템용으로 설계되었으며 DMA 엔진 또는 유사한 메모리 전송 모델을 통해 연결됩니다.

Sieve는 멀티코어 x86 시스템, Ageia PhysX Physical Processing UnitIBM Cell 마이크로프로세서에서 성공적으로 작동하는 것으로 [8]ANSI C는 특정 타깃플랫폼에서 컴파일러 코드 생성기를 사용할 수 없는 경우에 생성됩니다.이를 통해 기존 C 컴파일 툴킷을 사용하여 자동 평형을 수행할 수 있습니다[[permanent dead link]9].

「 」를 참조해 주세요.

레퍼런스

외부 링크