在當今高度互聯的數位時代,效能可攜性已成為軟體開發的重要議題。效能可攜性指的是應用程式能夠在不同的硬體平台上有效運行的能力。開發者們在設計效能可攜的應用程式時,需在不影響效能的前提下,支持多個平台,理想上還需將平台特定的代碼減至最少。
在高效能運算(HPC)社群中,效能可攜性被視為一項備受追捧的特性,然而目前尚未達成普遍或一致的測量標準。
效能的衡量方式有兩種:一是比較經過優化的應用版本與其可攜版本的性能;另一種則是根據執行期間所執行的浮點運算次數(FLOPs)和從主記憶體移動數據到處理器的頻率,來比較應用的理論峰值性能。隨著硬體多樣性的增加,開發能夠在廣泛機器上運行的軟體變得越來越關鍵,這會影響到應用的長期使用及更新的可能性。
效能可攜性在業界被廣泛提及,通常指的是:一是能在多個硬體平台上運行同一應用程式;二是在這些平台上達成某個性能指標。2016年美國能源部(DOE)舉辦的效能可攜性會議上,有專家表示,“應用程式若能在每個平台上相對於已知的最佳實現,達成一致的性能水平,則可被視為效能可攜”。
Jeff Larkin(NVIDIA)直接指出,效能可攜性就是「相同的源代碼能在多種不同的架構上生產性地運行」。
因此,效能可攜性在高效能計算社群中,成為重要的討論話題。業界、學界與DOE國家實驗室的合作夥伴們,從2016年起定期舉辦「性能、可攜性與高效能計算生產力論壇」,旨在促進性能可攜性的研究與開發。
隨著計算架構持續演變,效能可攜性依然具有重要的意義。開發者假設他們的單一代碼庫將能在更新的架構上,以及尚未測試的多種當前架構上,同樣達成可接受的性能。隨著硬體多樣性增加,開發能夠跨多個平台運行的軟體將成為必要,這關乎應用的生命力及持續相關性。
美國能源部的Exascale Computing Project (ECP)強調,效能可攜性是持續的關注點,特別是在多元平台的環境中。
自2016年來,DOE舉辦了多場研討會來探討效能可攜性的日益重要性。2017年的會議邀請了包括國家能源研究科學計算中心(NERSC)、洛斯阿拉莫斯國家實驗室(LANL)等多個知名機構的參與。
要量化一個程式何時達成效能可攜性,需考量兩個因素。第一,效能可攜性可以透過跨架構之間使用的代碼行數與只針對單一架構的代碼行數進行比較。第二,效能則可以通過多種方法進行測量。舉例來說,將平台最佳化的應用版本與可攜版本之間的性能進行對比,一個有效的測量方式是採用屋脊性能模型,這樣可獲得應用的理論峰值性能。
在2016年的會議上,就有參與者提到,“當應用團隊聲稱其效能可攜時,這段代碼就算是效能可攜的”。
近年來,研究指出,針對各種並行計算架構所撰寫的可攜性代碼,需遵從開放的標準編程模型,並且在多個平台上同時開發與改善代碼。這些策略能幫助開發者找到適合不同平台的參數。
市面上有多種程式應用及系統,旨在協助開發者實現效能可攜性。一些常見的框架包括OpenCL、SYCL、Kokkos、RAJA等,這些編程介面支援多平台的多重處理編程。而一些非框架的解決方案則包括自調整及特定領域的語言。
隨著技術的進步,我們是否已經準備好迎接一個全新的編程時代,讓效能可攜性的可能性跨越至全新的高度呢?