Charm++

Charm++
Charm++
패러다임메시지 구동 병렬 프로그래밍, 마이그레이션 가능한 객체, 객체 지향, 비동기식 다태스킹
설계자락스미칸트 케일
개발자병렬 프로그래밍 연구소
처음 등장한1980년대 후반(1980년대 후반)
안정된 릴리스
7.0.0 / 2021년 10월 25일, 9개월 전(2021-10-25)
구현 언어C++, Python
플랫폼Cray XC, XK, XE, IBM Blue Gene/Q, Infiniband, TCP, UDP, MPI, OFI
OSLinux, Windows, MacOS
웹 사이트http://charmplusplus.org

Charm++는 C++에 기반한 병렬 객체 지향 프로그래밍 패러다임으로 일리노이 대학교 Urbana-Champaign의 병렬 프로그래밍 연구소에서 개발되었습니다.Charm++는 병렬 프로그램의 높은 수준의 추상화를 제공하는 동시에 다양한 기반 하드웨어 플랫폼에서 뛰어난 성능을 제공하는 것을 목표로 설계되어 있습니다.Charm++로 작성된 프로그램은 chares라고 불리는 여러 메시지 기반 개체로 분해됩니다.프로그래머가 오브젝트에서 메서드를 호출하면 Charm++ 런타임 시스템은 호출된 오브젝트에 메시지를 보냅니다.이 오브젝트는 로컬프로세서 또는 병렬연산의 리모트프로세서에 존재할 수 있습니다.이 메시지는 메시지를 비동기적으로 처리하기 위해 샤어 내에서 코드 실행을 트리거합니다.

차어는 차어 어레이라고 불리는 인덱스 컬렉션으로 정리할 수 있으며 메시지는 차어 어레이 내의 개별 차어 또는 차어 어레이 전체에 동시에 송신할 수 있습니다.

프로그램의 차어는 적응형 런타임 시스템에 의해 물리 프로세서에 매핑됩니다.프로세서에 대한 차어의 매핑은 프로그래머에게 투과적이며, 이 투과성을 통해 런타임 시스템이 프로그램 실행 중에 프로세서에 대한 차어의 할당을 동적으로 변경하여 측정 기반 로드 밸런싱, 폴트 톨러런스, 자동 체크 포인트, 축소 및 확장 기능 등의 기능을 지원할 수 있습니다.병렬 프로그램에서 사용되는 프로세서 세트.

Charm++를 사용하여 구현된 애플리케이션에는 NAMD(분자역학) OpenAtom(양자화학), ChaNGa 및 SpECTRE(천문학), EpiSimdemics(항체역학), Chaular/Enzo-P(적응성 메시 정제) 및 로스(병렬 이산 이벤트 시뮬레이션)가 포함됩니다.이러한 애플리케이션은 모두 페타스케일 시스템에서 최대 10만 코어 이상으로 확장되었습니다.

Adaptive MPI(AMPI)[1]는 Charm++ 런타임 시스템 위에 Message Passing Interface 표준을 구현한 것으로 보다 전통적인 MPI 프로그래밍 모델에서 Charm++ 기능을 제공합니다.AMPI는 Charm++ 객체 내에 바인드된 사용자 수준의 마이그레이션 가능한 스레드 내에 각 MPI 프로세스를 캡슐화합니다.각 스레드를 샤레에 내장함으로써 AMPI 프로그램은 MPI 프로그램을 거의 변경하지 않고 Charm++ 런타임 시스템의 기능을 자동으로 활용할 수 있습니다.

Charm4pyPython에서 Charm++ 어플리케이션을 작성할 수 있으며, 이행 가능한 Python 오브젝트 및 비동기 원격 메서드 호출을 지원합니다.

다음은 [2]시연용 Charm++ 코드입니다.

헤더 파일(hello.h)
학급 안녕 : 일반의 CBase_Hello {  일반의:   안녕(); // C++ 컨스트럭터    무효 안녕하세요(인트 부터); // 원격으로 호출 가능한 "엔트리 메서드" }; 
Charm++ 인터페이스 파일(hello.ci)
모듈 안녕 {   배열 [1D] 안녕 {     엔트리 안녕();     엔트리 무효 안녕하세요(인트);   }; }; 
소스 파일(hello.cpp)
# 포함하다 "안녕하세요.decl.h" # 포함하다 "hello.h"  외부 CProxy_Main 메인 프록시; 외부 인트 요소;  안녕::안녕() {   // 이 간단한 예에서는 초기화할 멤버 변수가 없습니다. }  무효 안녕::안녕하세요(인트 부터) {    // 이 chare 객체가 사용자에게 인사하도록 합니다.   CkPrintf("프로세서 %d의 chare # %d에서 안녕하세요 (%d에서 전달)\n",            이 인덱스, CkMyPe(), 부터);    // 이 샤레 오브젝트 배열의 다음 샤레 오브젝트를 지정합니다.   // 인사도 합니다.이것이 의 마지막 샤레 오브젝트인 경우   // chare 객체의 배열, 메인 chare에 알립니다.   // 프로그램을 종료하는 객체.   한다면 (이 인덱스 < > (요소 - 1)) {     이 프록시[이 인덱스 + 1].안녕하세요(이 인덱스);   } 또 다른 {     메인 프록시.다 했어요.();   } }  # 포함하다 "hello.def.h" 

적응형 MPI(AMPI)

Adaptive MPI는 Charm++ 런타임 시스템 위에 MPI(MPI, OpenMPI, MVAPICH 등)를 구현한 것입니다.사용자는 기존 MPI 애플리케이션을 가져와 AMPI의 컴파일러 래퍼를 사용하여 다시 컴파일하고 프로세스 가상화, 동적 로드 밸런싱 및 폴트 톨러런스 실험을 시작할 수 있습니다.AMPI는 (운영 체제 프로세스가 아닌) 사용자 수준의 스레드로 MPI "랭크"를 구현합니다.이러한 스레드는 컨텍스트 전환이 빠르기 때문에 메시지 가용성에 따라 여러 스레드를 동일한 코어로 동시 스케줄링할 수 있습니다.AMPI 순위 및 보유한 모든 데이터는 런타임에 작업의 서로 다른 코어 및 노드 간에 마이그레이션될 수도 있습니다.이는 로드 밸런싱 및 체크포인트/재시작 기반 Fault Tolerance 체계에 유용합니다.AMPI 의 상세한 것에 대하여는, 다음의 메뉴얼을 참조해 주세요.http://charm.cs.illinois.edu/manuals/html/ampi/manual.html

참4py

Charm4py는[3] Charm++ C++ 런타임 위에 구축된 Python 병렬 컴퓨팅 프레임워크로 공유 라이브러리로 사용됩니다.Charm4py는 Charm++ 어플리케이션 개발을 단순화하고 프로그래밍 모델의 일부를 합리화합니다.예를 들어 인터페이스 파일(.ci 파일)을 쓰거나 SDAG를 사용할 필요가 없으며 프로그램을 컴파일할 필요도 없습니다.사용자는 여전히 Numba와 같은 기술을 사용하여 애플리케이션 수준의 코드를 가속할 수 있습니다.Linux, MacOS 및 Windows에 즉시 사용할 수 있는 표준 바이너리 버전을 pip을 사용하여 설치할 수 있습니다.

하이브리드 Charm4py와 MPI 프로그램 [4]작성도 가능합니다.지원되는 시나리오의 예로는 계산의 특정 부분에 mpi4py 라이브러리를 사용하는 Charm4py 프로그램이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Parallel Programming Laboratory". charm.cs.illinois.edu. Retrieved 2018-12-12.
  2. ^ "Array "Hello World": A Slightly More Advanced "Hello World" Program: Array "Hello World" Code". PPL - UIUC PARALLEL PROGRAMMING LABORATORY. Retrieved 2017-05-08.
  3. ^ "Charm4py — Charm4py 1.0.0 documentation". charm4py.readthedocs.io. Retrieved 2019-09-11.
  4. ^ "Running hybrid mpi4py and Charm4py programs (mpi interop)". Charm++ and Charm4py Forum. 2018-11-30. Retrieved 2018-12-11.

외부 링크