PerfMPL 國產高性能數學計算庫的進展- 程式开发 – 中文開源技術交流社區

作者:王軍輝

前言

數學計算庫是使能處理器在數值計算領域的基礎軟件庫,是工程計算、科學計算、AI計算的基石。大部分物理、工程問題都能轉化成線性方程組求解問題,而高效的數學計算庫是發揮硬件算力的基石。

以BLAS(Basic Linear Algebra Subprograms,基本線性代數運算函數庫的標準)為例。 BLAS最早是由美國能源部(Department of Energy)於1979年發布的。在此之前,每個應用程序都需要手動實現線性代數算法,而這些算法又需要不同的數據結構和運算方式。

為了解決這個問題,美國能源部創建了BLAS標準,通過為常見操作(如向量乘法、矩陣乘法、向量加法等)定義通用接口,使得用戶可以在不同的平台和計算機架構上重用相同的代碼。最初的BLAS標準包含40個Fortran語言函數,用於執行常見的線性代數運算。

隨著時間的推移,標準還進行了更新和擴充,增加了更多的函數和特性。 BLAS已經成為一個廣泛使用的標準,能夠提供高效的線性代數運算,同時也是很多高性能庫的基礎,如OpenBLAS、MKL等。

隨著計算機技術的發展和日益廣泛的應用,數學計算庫也不斷演進,常用函數已經達到一萬個,版本多種多樣,也成為國際巨頭掌控軟件生態的關鍵手段。

Intel MKL數學計算庫發展時間軸

高性能數學計算庫的現狀

數學計算庫主要包括線性代數庫、信號處理、向量數學庫、基本數學函數庫(Libm)、PDE各種Solver,其大致範圍參見“附件1”。

軟件版本也多種多樣,有專注於領域的數學計算軟件,也有服務於某類處理器的數學計算軟件,其他差異性還表現在以下幾個方面:

  1. 服務於處理器的基礎數學計算庫版本。 Intel的MKL數學計算庫,只支持x86,源代碼不開源,並優先支持Intel處理器,同時在x86生態,MKL庫的使用也最為廣泛,原因主要是發展早,以及Intel處理器在高性能計算領域的市場佔有率極高有關。華為的KML數學計算庫支持華為鯤鵬ARM處理器,不開源,按照“鯤鵬應用使能套件BoostKit許可協議”描述,僅面向簽署該協議或者在鯤鵬硬件授權使用該軟件包。澎峰科技的PerfMPL已經支持了多種主流指令集,如RISC-V、x86、ARM、RISC-V等指令集,並面向領域提供定向優化版本,商業版本不開源。還有CUDA這類的GPU並行數學計算庫(cuBLAS、cuFFT等),用於NVIDA的GPU卡編程,其他公司是否可以使用CUDA計算庫,法律授權存疑。
  2. 服務於領域的數學計算軟件。例如,世界知名的開源項目OpenBLAS提供BLAS運算能力;FFTW實現快速傅里葉變換(Fast Fourier Transform);LAPACK(Linear Algebra Package)提供高級線性代數算法,如矩陣分解、特徵值和特徵向量計算等;VSIPL主要用於向量、信號和圖像處理庫;PETSc則提供更豐富一些的功能,如非線性求解、最優化、離散事件模擬和信號處理等。實際上,可以稱之為數學計算庫或者計算中間件的軟件還有許多。
  3. 其他需要關注的差異性:
    1. 各種數學計算庫軟件存在開源、閉源的差異性。處理器公司自主開發的數學計算庫通常是閉源,即使是可以使用,也隨時面臨版權擁有方授權協議的變化和製約。某些開源庫協議商用不友好(例如FFTW是GPL協議,使用會導致產品所有代碼被感染,將面臨被迫開源)。
    2. 計算性能和計算精度問題,這兩點在高性能計算領域尤其關注。所以,在使用開源軟件作為商業服務的一部分時,需要重視。
    3. 支持的編程語言存在差異。 OpenBLAS除支持C和C++以外,還支持Fortran、Python、R、Julia、MATLAB、Java等編程語言。
    4. 支持的操作系統存在差異。 Intel MKL支持Windows、Linux、macOS;OpenBLAS支持Linux,macOS,Windows,BSD,Android/iOS;華為KML主要支持Linux相關操作系統。

發達國家都將並行化的數學計算庫作為其基礎軟件的長期發展重點。例如:1993年,受到高性能計算機系統上的並行計算需求的推動,PETSc(Portable, Extensible Toolkit for Scientific Computation)項目正式啟動,由美國加州大學聖巴巴拉分校計算科學研究所的數學和計算科學研究組(Mathematics and Computer Science group of the Institute for Computational Sciences)發起和開發,目的是為了提供一套並行的數學軟件庫,用於高效地解決大規模科學計算的問題。

現在,PETSc被廣泛地應用於渦流,油藏模擬,光電學,電磁學,地震學,心臟模擬,碰撞模擬,天文學,機器學習等研究領域。

數學計算庫的研發與發展,對一個國家在芯片設計、算法開發和應用場景多產生著非常積極的意義和重要的作用。

軟硬融合發展示意圖

高性能數學計算庫的應用

高性能數學計算庫對EDA、CAE、微電子工程等工程計算領域,發揮著重要的作用,支持並行計算和異構計算的數學計算庫也是近年來的研究重點,如:

  1. 利用CPU的加速指令集進行算法加速。
  2. GPU並行算法加速
  3. 大規模集群並行計算

長期以來,國外為了控制我國高科技領域的發展,限制高性能的計算軟件向中國用戶提供。高性能數學計算庫推動著科學研究的進步,也制約工程應用的效率。以下以幾個典型的領域,介紹高性能數學計算庫對應用的重要意義。

【CFD軟件】線性代數庫:用於解方程組,如求解矩陣方程和求解特徵值和特徵向量。最優化庫:用於優化CFD模擬計算的效率和準確度。數值積分庫:用於對數學函數進行數值積分,如有限差分方法。隨機數生成庫:用於產生隨機數,這在許多CFD應用中是必要的。偏微分方程(PDE)求解庫:用於求解一些非線性PDEs,如Navier-Stokes方程和熱傳遞方程等。

【CAE軟件】建模和仿真:數學計算庫能夠提供各種模擬算法和數值方法,如有限元法、有限差分法等,用於建模和仿真機械、電氣、力學、熱力學等領域的物理現象。優化設計:數學計算庫提供各種優化算法,如遺傳算法、模擬退火算法等,用於對CAE仿真模型進行設計和優化,以獲得更好的性能和效率。數據分析:數學計算庫提供各種數學函數和統計算法,用於分析和處理模擬數據,以獲得有用的信息和洞見。機器學習:數學計算庫中還提供了機器學習和數據挖掘的算法和工具,這些技術可以用於優化CAE仿真模型、識別模擬數據中的模式和異常,從而幫助工程師更好地理解和改進設計。

【微電子工程】計算光刻方法是一種通過計算機控制產生高分辨率圖案的加工工藝,使用光刻光刻機將外源干涉光柵(如二極管激光器)的輸出通過透鏡等光學元件照射到矽晶圓表面上,然後進行化學及物理反應生成微電子芯片的微電路。數學計算庫發揮著重要的作用。

  1. 模型建立:計算光刻涉及到光學、物理、化學等多個領域的知識,需要使用數學模型進行問題的數值求解。數學計算庫可以提供各種數值計算算法和快速計算技術,如有限差分法、有限元法等,以建立可靠的計算模型。
  2. 仿真計算:數學計算庫可以處理大量的數據和復雜的計算任務,可以在短時間內對整個光刻過程進行仿真計算,從而預測和優化光刻過程的各個環節。
  3. 優化設計:計算光刻涉及到的問題非常複雜,需要通過優化設計來提高製造效率和芯片質量。數學計算庫可以提供各種優化算法,如遺傳算法、粒子群算法等,以提高光刻製造的效率和芯片質量。

【EDA領域】在電路仿真中Sparse LU Factorize(稀疏LU分解)占到仿真時間的70%,小規模矩陣計算的優化可以提升計算效率。

【AI領域】以語音識別的DNN推理為例,推理過程調用GEMM佔比80%以上。通過對OpenBLAS的GEMM部分優化,發揮SIMD、多核並發,計算性能提高26%以上。

國產高性能數學計算庫PerfMPL

張先軼(中科院博士)於2011年發起OpenBLAS開源項目,OpenBLAS是一個優化的BLAS庫(http://www.openblas.net),被廣泛應用於科學計算、數據分析、深度學習算法、人工智能等領域,被Caffe、MXNet、Julia、Ubuntu、Debian、openSUSE、GNU Octave等知名項目集成;OpenBLAS也被用作為各種處理器系統開發包的基礎軟件之一。

PerfMPL是以OpenBLAS為發展基礎,經過多年發展逐步覆蓋至FFT(快速傅立葉變換)、SPARSE(稀疏矩陣計算庫)、MATH(基礎數學庫)、VML(Vector Math Library向量數學庫)、DNN(Deep Neural Networks深度神經網絡)、PerfIPP(圖像處理等)等計算庫。

PerfMPL基於澎峰科技擁有自主知識產權的統一數學函數庫技術積累,通過針對性優化、完善、裁剪等方式,發展出兩大分支版本:

  1. PerfMPL for 通用算力,主要面向CPU指令集。重點支持x86、ARM和RISC-V高性能通用處理器平台。
  2. PerfMPL for 專用算力,主要面向GPU、NPU、ASIC、FPGA和各類DSA。

自主研發的源代碼,也使得澎峰科技可以為特定領域提供加速計算服務和領域數學計算庫,並重點支持國產的CAE、EDA、信號處理、計算光刻等領域。

澎峰科技的軟件加速計算理論體係是:模型製導、算法支撐、優化支持、性能為王,具體到PerfMPL而言:

PerfMPL主要優化策略如下

  • 性能驅動的優化模型構建技術
  • 面向複雜體系結構的新型並行算法設計
  • 基於模板的高性能彙編代碼自動生成技術
  • 場景和應用感知兼顧的性能自適應優化技術

結束語

總的來說,高性能數學庫已經經歷了多個階段的發展和演變,並且隨著計算機硬件技術的不斷提升,數學庫的功能和效率也在不斷地提高。從最初的基礎數學函數庫到現在能夠進行複雜科學計算的數值計算庫,高性能數學庫的發展為科學計算和工程應用提供了強大的支持。

未來,我們可以期待更高效、更智能的數學庫的誕生,這將會為解決更為複雜的問題提供更好的工具和支持。此外,高性能數學庫的發展也在國家自主可控戰略方針中扮演著重要的角色。

在當前全球科技創新競爭日益激烈的背景下,高性能數學庫的自主研發和掌握,對於保障國家信息安全、提高關鍵技術自主可控能力和推動經濟發展具有十分重要的戰略意義。我們相信,在政府和企業共同努力下,高性能數學庫的發展將在國家自主可控戰略的支持下邁上新的台階。

附件1:

#PerfMPL #國產高性能數學計算庫的進展 #程式开发 #中文開源技術交流社區

Leave a Reply

Your email address will not be published. Required fields are marked *