Lumerical案例 | 獲得理想FDTD性能
引言
本文將介紹一些可用于提升仿真性能的簡單策略。這些基本策略可能需要一些測試和預先思考,但它們簡單易行,對于大規模任務、多參數掃描和各種優化方案都大有裨益。
注意:本文內容僅適用于在CPU上運行的FDTD仿真。
更高效的仿真
1.改進仿真設置
這意味著通過調整網格大小(在確保得到合理結果的前提下盡可能增大Δx)、利用現有的對稱性或減少監視器收集的數據量來降低仿真要求。這樣做可以確保消除或至少大限度地減少不必要的操作。較為關鍵的考慮因素是能否降低仿真的空間和時間分辨率,因為算法的計算量如下:
其中,D為維度,dx為網格尺寸,V為仿真體積。這些參數通常會根據最短波長和網格精度自動設置。降低最高頻率、降低網格精度或縮小仿真體積都能提高性能,但必須權衡各種需求。進行收斂性測試,以找到合適的精度和性能平衡點。
如果能減少監視器收集的數據量(例如,移除一些監視器、縮小監視器尺寸或減少頻點數量),這將有所幫助。高級設置允許您指定要收集哪些場數據,以及是否要降低空間分辨率。頻域和時域監視器不會造成數據過載,但請仔細考慮哪些監視器是真正必要的。動態監視器對于建立直覺和調試非常有用,但會在每個時間步增加額外的復雜性;如果性能至關重要,則不應使用動態監視器。
2.有效利用CPU資源
分布式計算允許我們使用消息傳遞接口MPI將大型FDTD仿真作業拆分到不同的處理器或核心上。
- 將仿真分割成多個可以并行運行的空間單元,并在每個時間步傳遞場。
- 支持兩種不同的并發機制:
- - 啟動多個可執行文件。
- - 可執行文件,生成多個線程。
如果您點擊FDTD Solutions頂部菜單欄上的“資源”按鈕,將會打開資源配置窗口,您可以在其中找到特定機器的并發設置。正如您在此處看到的,每個FDTD求解器都會將仿真分解為4個進程,每個進程包含4個線程。
這將在一臺16核的機器上運行一次模擬。需要注意的是,線程數乘以進程數必須等于給定機器上可用的CPU核心總數。這將確保所有CPU核心都被占用。
3.并行運行獨立仿真
并行化是指使用獨立的處理器或封裝在單個處理器內的獨立CPU核心來同時運行多個模擬。這在運行掃描或使用Lumerical作業管理器對任務進行排隊時非常有用。以下資源配置提供了一個很好的示例。
這里我們有一臺32核的本地機器,配置為使用4個進程和線程并行運行2個模擬。此外,本地網絡上還有一個名為“compue_node”的遠程資源,擁有64個核心。它配置為使用相同數量的進程和線程運行,并將啟動4個模擬。由于采用了新的許可證共享功能,此配置將并行運行6個模擬,并消耗3個FDTD引擎許可證。
本文討論僅限于Lumerical的作業管理器;不過,也可以使用作業調度程序。
4.優化資源配置和硬件
當仿真任務分布到更多核心上時,求解速度的提升將不再顯著。通常會有一個瓶頸,具體瓶頸取決于您的仿真設置。一旦達到收益遞減點,就可以安全地將多余的核心用于其他并行任務。通過配置多個處理器和處理器核心,操作系統可以在不同的核心上運行多個作業,而無需進行任務切換。
對于某些工作流程,您可能需要測試各種配置、MPI版本和機器,以極大限度地提高吞吐量。
基準測試
有效的資源配置取決于您的仿真設置、仿真規模以及運行仿真的硬件;因此,沒有通用的規則可以最大化吞吐量。盡管如此,您仍然可以使用本文附帶的腳本文件輕松執行自己的基準測試。對于需要大量仿真的工作流程,運行一些基準測試將有助于您決定如何分配工作流程,從而節省時間并有效利用許可證。
仿真日志文件提供了大量有用的信息。它會詳細說明如何通過MPI對FDTD計算體進行分區,以及每秒的求解速率(以兆節點/秒為單位),即每秒執行多少百萬次浮點運算。您還可以找到各個進程所花費時間的明細以及調試信息。
1.通過增加進程數來增加核心數
提升性能較簡單直接的方法是增加進程數,同時保持線程數固定為1。默認情況下,FDTD會使用所有可用核心。如果我們使用示例文件運行lsf腳本FDTD_bench_core.lsf,則會得到以下結果。
正如預期,隨著核心數量的增加,仿真求解速度提高,仿真時間縮短。但需要注意的是,這種提升并非線性關系。實際上,核心數量增加4倍,從6個增加到24個,求解速度大約翻了一番,從120Mnodes/s提升到260Mnodes/s。無論如何,隨著核心數量的增加,收益會逐漸遞減,但拐點的位置取決于具體的仿真情況。由于用戶通常受到許可證的限制,他們往往希望使用所有可用的核心,這通常也是推薦實踐。
2.線程與核心
在給定核心數量的情況下,我們可以調整線程數和進程數,以查看是否能提升性能。本例中使用機器上的所有核心數(28),但您可以選擇任意數量的核心數進行測試,只需確保線程數和進程數之和等于該固定值即可。使用附件中的基準測試文件,運行腳本FDTD_bench_thread.lsf,即可得到以下結果。
在這種情況下,使用28個進程和1個線程可以達到極高的求解速度。使用7個進程和4個線程(每個進程4個線程)可以達到類似的結果,但略有下降;而使用14個進程和2個線程(每個進程2個線程)則性能更差。您可能會得到不同的結果,但這最終只是一些微調,通常無法像直接增加核心數那樣獲得相同的性能提升。
3.提高并發吞吐量
通過并行運行作業(即并發),我們可以在相同時間內完成更多作業。這對于大規模掃描或優化非常有用。正如我們在步驟1中看到的,核心數增加4倍并不會帶來4倍的性能提升。如果使用四分之一的可用核心并行運行4個仿真,那么在很多情況下,其速度會比使用所有核心順序運行4個仿真更快。
在下圖中,我們使用了所有可用核心,但通過增加容量并相應減少每次模擬的核心數來實現性能提升。示例腳本FDTD_bench_capacity.lsf包含在內。
我們看到,單個仿真的性能變差了,但并發效應更強,從而帶來了更好的整體性能。
此外,您可能還想嘗試不同的硬件配置或MPI類型。在云端,可能的組合非常豐富,使用Ansys Cloud可以輕松地嘗試不同的實例。您還可以將結果與現有的FDTD性能基準測試進行比較。
推薦參閱
有關高性能計算、硬件如何影響仿真性能以及如何優化AWS實例的更多信息,請參閱這些帖子。
- High Performance Computing
鏈接:https://support.lumerical.com/hc/en-us/sections/360004730713
- FDTD Simulation Benchmark
鏈接:https://support.lumerical.com/hc/en-us/articles/4403780894355
- Information on Hardware Specification
鏈接:https://support.lumerical.com/hc/en-us/articles/4403788732051
- Resource configuration elements and controls
鏈接:https://optics.ansys.com/hc/en-us/articles/360058790674
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















