大規模平行 GPU ODE 求解器
適用於大量獨立常微分方程組的 GPU 加速積分器
模組:
單系統每線程 v3.1
它求解具有不同初始條件和/或參數集的相同 ODE 系統的大量實例。
每塊耦合系統 v1.0
它解決具有不同初始條件和/或參數集的耦合系統(由許多子系統組成)的大量實例。
發行說明:
2020 年 8 月 18 日。
單系統每線程 v3.1:
- 支援單精度和雙精度。
- 改進/重新設計的手冊,例如,針對 Windows 使用者的更詳細的安裝指南。
- 包含批次檔 make.bat 以簡化 Windows 上的編譯過程。
- 新增了一個新教程(教程 5)來測試具有非常大時間尺度差異的實例的範例。 MPGOS 的效能曲線與程式包 odeint (C++) 和 DifferentialEquations.jl (Julia) 進行了比較。 MPGOS 優於這些軟體包。
- 教學 6(衝擊動力學)也擴展了效能曲線,請參考上一點。在這種情況下,MPGOS 是唯一能夠處理具有衝擊動態的系統(在 GPU 上)的程式包。因此,僅對 odeint 和 DifferentialEquations.jl 的 CPU 版本進行了效能比較。
- 小改動: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:
- 現在支援密集輸出,但限制很少,請參閱手冊。例如,這是求解時滯微分方程的先決條件。
- 程式碼及其介面大大簡化和清晰。例如,問題池從程式碼中完全省略(由於歷史原因而保留),並且許多可能的選項現在綁定到求解器對象,可以使用單一成員函數來設定所有這些選項。
- 該手冊還根據回饋進行了重組和簡化。
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 方法。 (由於隱式解算器的控制流程複雜,即使對於剛性問題,顯式解算器有時也比隱式解算器表現更好)。
- 僅支援雙精度算術運算。
- 僅儲存每個積分階段的端點(以提高速度)。然而,這很少是一個問題,因為使用者可編程參數和上述使用者定義的互動允許儲存軌跡的最複雜的屬性,請參閱文件。