대규모 병렬 GPU ODE 솔버
다수의 독립적인 상미분 방정식 시스템을 위한 GPU 가속 적분기
모듈:
스레드당 단일 시스템 v3.1
이는 서로 다른 초기 조건 및/또는 매개변수 세트를 사용하여 동일한 ODE 시스템의 많은 인스턴스를 해결합니다.
블록별 결합 시스템 v1.0
이는 다양한 초기 조건 및/또는 매개변수 세트를 사용하여 결합 시스템(여러 하위 시스템으로 구성)의 많은 인스턴스를 해결합니다.
릴리스 노트:
2020년 8월 18일.
스레드당 단일 시스템 v3.1:
- 단정밀도와 배정밀도를 모두 지원합니다.
- 개선/재작업된 매뉴얼(예: Windows 사용자를 위한 보다 자세한 설치 가이드)
- Windows에서 컴파일 프로세스를 단순화하기 위해 배치 파일 make.bat를 포함합니다.
- 시간 규모 차이가 매우 큰 인스턴스가 있는 예제를 테스트하기 위해 새 튜토리얼(튜토리얼 5)이 추가되었습니다. MPGOS의 성능 곡선은 프로그램 패키지 odeint(C++) 및 DifferentialEquations.jl(Julia)와 비교됩니다. MPGOS는 이러한 패키지보다 우수합니다.
- 튜토리얼 6(충격 역학)도 성능 곡선으로 확장되었습니다. 이전 항목을 참조하세요. 이 경우 MPGOS는 (GPU에서) 충격 역학이 있는 시스템을 처리할 수 있는 유일한 프로그램 패키지입니다. 따라서 성능 비교는 CPU 버전의 odeint와 DifferentialEquations.jl로만 이루어졌습니다.
- 사소한 변경 사항: TimeDomain 변수와 ActualState 변수를 명확하게 구분합니다.
블록별 결합 시스템 v1.0:
- 첫 번째 MPGOS 모듈이 준비되었습니다. 이 코드는 다양한 초기 조건 및/또는 매개변수 세트를 사용하여 결합 시스템(단위라고 하는 많은 하위 시스템으로 구성)의 많은 인스턴스를 해결하도록 설계되었습니다.
- 이 모듈은 Single System Per-Thread v3.1 모듈의 거의 모든 기능을 상속받습니다. 몇 가지 특수성이 있습니다. 예를 들어 이벤트 처리는 단위 수준에서만 가능합니다. 명시적 결합만 행렬 형식으로 처리할 수 있습니다. 자세한 내용은 관심 있는 독자가 매뉴얼을 참조하십시오.
- 두 가지 튜토리얼 예제가 제공됩니다.
2020년 2월 14일.
스레드당 단일 시스템 v3.0:
- 대규모 성능 개선. 도입된 템플릿 메타프로그래밍 기술을 통해 우리는 고도로 최적화된 코드를 생성할 수 있었습니다. 평균 누출은 3배인 반면, 저차원 시스템의 경우 수십배가 될 수도 있습니다.
2019년 10월 10일.
스레드당 단일 시스템 v2.1:
- 템플릿 메타프로그래밍을 사용하면 코드가 완전히 템플릿화되어 컴파일 시간 동안 고도로 전문화된 솔버 코드를 생성합니다(알고리즘의 기능과 이벤트 처리 및 조밀한 출력의 필요성). 이에 따라 파일 시스템이 재작업됩니다.
- 소규모 확장: 복잡한 시스템에 대해 복잡한 인덱싱 기술을 효율적으로 달성할 수 있도록 정수 공유 매개변수 및 정수 액세서리를 사용할 수 있습니다.
2019년 8월 13일.
스레드당 단일 시스템 v2.0:
- 이제 몇 가지 제한 없이 밀도 있는 출력이 지원됩니다. 설명서를 참조하세요. 이는 예를 들어 지연 미분 방정식을 풀기 위한 전제 조건입니다.
- 코드와 인터페이스가 크게 단순화되고 명확해졌습니다. 예를 들어 문제 풀은 코드에서 완전히 생략되었으며(역사적 이유로 유지됨) 이제 단일 멤버 함수로 모두 설정할 수 있는 Solver 개체에 가능한 많은 옵션이 바인딩됩니다.
- 피드백에 따라 매뉴얼도 재구성되고 단순화되었습니다.
2019년 4월 9일.
스레드당 단일 시스템 v1.1:
- 장치(GPU)는 각 솔버 개체에 연결될 수 있습니다. 따라서 이제 장치 선택이 자동으로 처리됩니다.
- 각 솔버 개체에 대해 CUDA 스트림이 자동으로 생성됩니다.
- CPU-GPU 계산을 겹치고 단일 노드의 다양한 GPU에 작업 부하를 쉽게 분산시키는 새로운 멤버 함수 세트입니다. 여기에는 비동기식 메모리 및 커널 작업, CPU 스레드와 GPU 스트림 간의 동기화 가능성이 포함됩니다.
- 테일링 효과를 편안하게 처리하기 위해 각 통합 단계에서 활성 스레드 변수 수를 지정할 수 있습니다.
- 두 가지 새로운 튜토리얼 예제가 추가되었습니다. a) 여러 솔버 개체를 사용하여 CPU 및 GPU 계산이 겹치는 경우 b) 단일 시스템/노드에서 사용할 수 있는 여러 GPU를 사용하는 경우입니다.
2019년 2월 14일.
스레드당 단일 시스템 v1.0:
- 첫 번째 MPGOS 모듈이 준비되었습니다. 이 코드는 GPU에서 수많은 독립적이지만 동일한(매개변수 세트와 초기 조건이 다를 수 있음) ODE 시스템을 해결하도록 설계되었습니다.
- 사용자 친화성. C++ 프로그래밍을 처음 접하는 사람들이라도 짧은 과정만으로도 프로그램 패키지를 사용할 수 있습니다.
- 튜토리얼 예제가 포함된 자세한 매뉴얼이 있습니다. 따라서 사용자는 코드 블록을 복사하여 붙여넣어 자신만의 프로젝트를 쉽게 구축할 수 있습니다.
- 효율적이고 강력한 이벤트 처리.
- 유연성을 위해 매 시간 단계마다 사용자 정의 작업을 수행합니다.
- 모든 성공적인 시간 단계 또는 이벤트 처리 후 사용자 정의 "상호작용"(예: 충격 역학에 매우 유용함, 매뉴얼의 튜토리얼 예제 참조)
- 세부 사항에 대한 명시적인 지식 없이도 GPU의 메모리 계층 구조를 활용할 수 있습니다.
- 유연한 구현 및 궤적의 특수 속성 저장을 위한 사용자 프로그래밍 가능 매개변수입니다.
- 명시적 솔버만 해당: 고정 시간 단계를 사용하는 4차 Runge-Kutta 및 5차 내장 오류 추정을 사용하는 4차 Runge-Kutta-Cash-Karp 방법. (암시적 솔버의 복잡한 제어 흐름으로 인해 명시적 솔버는 경직성 문제에 대해서도 암시적 솔버보다 더 나은 성능을 발휘하는 경우가 있습니다.)
- 배정밀도 산술 연산만 지원됩니다.
- 속도 향상을 위해 각 통합 단계의 엔드포인트만 저장합니다. 그러나 사용자가 프로그래밍할 수 있는 매개변수와 앞서 언급한 사용자 정의 상호 작용을 통해 궤도의 가장 복잡한 속성을 저장할 수 있으므로 이는 거의 문제가 되지 않습니다. 설명서를 참조하세요.