高速緩存與矩陣乘法(二)

LAPACK

如果矩陣的規模較小,直接按照公式展開計算倒是看不出性能上有什麼大問題,比如兩個二維方陣相乘,計算公式如下
c[i][j]=k=1na[i][k]b[k][j],1in,1jn c[i][j]=\sum^n_{k=1}a[i][k]*b[k][j],\quad 1\leqslant i\leqslant n,1\leqslant j\leqslant n
但是,隨着矩陣規模的增大,這種計算方式的性能瓶頸就比較突出了,根本無法滿足正常的業務需要。

下面介紹基於 BLAS (Basic Linear Algebra Subprograms) 算法庫的線性代數庫 LAPACK (Linear Algebra PACKage),該庫是用 Fortran 編寫的算法庫,是爲了解決通用的線性代數問題的。不少計算機廠商都提供了針對不同處理器進行了優化的 BLAS/LAPACK 算法包,例如 Intel 的 MKL (Math Kernel Library,商業版),AMD 的 ACML 等。在 Matlab 的 bin 目錄裏可以發現 MKL、blas、lapack 的蹤影,所以由此推斷,Matlab 底層應該也是使用了 BLAS/LAPACK 庫的。

CLAPACK

CLAPACK 是使用 f2c 工具將 LAPACK 的 Fortran 代碼轉換成 C 語言代碼的 C 語法算法包,其主頁是 http://www.netlib.org/clapack,下面介紹如何在 windows 系統中編譯生成 CLAPACK 庫。

環境準備

  • Windows 10
  • Visual Studio 2019(受支持的其它版本亦可)
  • 下載 cmake,並安裝到系統上
  • 在 CLAPACK 的主頁 http://www.netlib.org/clapack 下載源碼包 clapack-3.2.1-CMAKE.tgz,並解壓

編譯 CLAPACK 源碼

首先,打開 CMake(cmake-gui)應用程序,如下圖所示
在這裏插入圖片描述
第一步,輸入 clapack 源碼目錄;第二步,指定一個新目錄,用於存放要生成的解決方案 (CLAPACK.sln);第三步,設置要生成的解決方案的參數,如下圖所示
在這裏插入圖片描述
選擇使用 Visual Studio 16 2019 生成工程,並指定 x64 平臺(後面可以按照同樣的步驟生成 win32 或其它平臺下的工程),點擊 Finish 按鈕,就會開始生成解決方案了。如果生成後有紅色的錯誤提示信息,如下圖所示,點擊按鈕 Generate 重新生成即可,可能需要執行兩次,錯誤提示信息纔會消失。
在這裏插入圖片描述
之後就可以到生成的解決方案目錄下,打開解決方案 CLAPACK.sln,並分別編譯 Debug 和 Release 版本。然後,就可以分別到對應的工程目錄下找到編譯好的庫文件,有以下三個:

blas.lib

libf2c.lib

lapack.lib

而引用上述靜態庫所需要包含的頭文件,則可以在 CLAPACK 源碼目錄下的 INCLUDE 目錄下找到,有以下三個文件:

blaswrap.h

clapack.h

f2c.h

將編譯好的靜態庫文件和需引用的頭文件收集到一起,就可以提供給其它動態庫或應用程序引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章