Charm++
Charm++패러다임 | 메시지 구동 병렬 프로그래밍, 마이그레이션 가능한 객체, 객체 지향, 비동기식 다태스킹 |
---|---|
설계자 | 락스미칸트 케일 |
개발자 | 병렬 프로그래밍 연구소 |
처음 등장한 | 1980년대 후반( | 후반)
안정된 릴리스 | 7.0.0 / 2021년 10월 , 전( |
구현 언어 | C++, Python |
플랫폼 | Cray XC, XK, XE, IBM Blue Gene/Q, Infiniband, TCP, UDP, MPI, OFI |
OS | Linux, 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++ 런타임 시스템의 기능을 자동으로 활용할 수 있습니다.
Charm4py는 Python에서 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 프로그램이 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Parallel Programming Laboratory". charm.cs.illinois.edu. Retrieved 2018-12-12.
- ^ "Array "Hello World": A Slightly More Advanced "Hello World" Program: Array "Hello World" Code". PPL - UIUC PARALLEL PROGRAMMING LABORATORY. Retrieved 2017-05-08.
- ^ "Charm4py — Charm4py 1.0.0 documentation". charm4py.readthedocs.io. Retrieved 2019-09-11.
- ^ "Running hybrid mpi4py and Charm4py programs (mpi interop)". Charm++ and Charm4py Forum. 2018-11-30. Retrieved 2018-12-11.
- Charm 병렬 프로그래밍 언어 및 시스템: 파트 I - 언어 기능 설명, PDF 파일
- Charm 병렬 프로그래밍 언어 및 시스템: 파트 II - 런타임 시스템, PDF 파일