CBLAS的安裝與使用

2021-06-18 00:12:01 字數 2571 閱讀 1677

cblas的安裝與使用

[email protected]

在cblas的安裝目錄$(cbdir)下的src目錄中有個cblas.h是包括的cblas的函式和常量的標頭檔案,使用cblas的時候就需要這個標頭檔案,同時還需要blas的庫檔案$(bllib )和cblas的庫檔案$(cblib)。

cblas/blas分為3個level,level1是用於向量的計算,level2是用於向量和矩陣之間的計算,level3是矩陣之間的計算。比如計算矩陣的乘法就是屬於level3,這裡就用矩陣乘法來學習使用cblas。

計算矩陣乘法的函式之一是 cblas_sgemm,使用單精度實數,另外還有對應雙精度實數,單精度複數和雙精度複數的函式。在此以 cblas_sgemm為例。

函式定義為:

void cblas_sgemm(const enum cblas_order order, const enum cblas_transpose transa,

const enum cblas_transpose transb, const int m, const int n,

const int k, const float alpha, const float *a,

const int lda, const float *b, const int ldb,

const float beta, float *c, const int ldc)

關於此函式的詳細定義可以在找到,只不過是fortran語言的,這個c語言版的略有差別。

此函式計算的是 c = alpha*op( a )*op( b ) + beta*c,

const enum cblas_order order,這是指的資料的儲存形式,在cblas的函式中無論一維還是二維資料都是用一維陣列儲存,這就要涉及是行主序還是列主序,在c語言中陣列是用行主序,fortran中是列主序。我還是習慣於是用行主序,所以這個引數是用cblasrowmajor,如果是列主序的話就是cblascolmajor。

const enum cblas_transpose transa和const enum cblas_transpose transb,這兩個引數影響的是op( a )和op( b),可選引數為cblasnotrans=111, cblastrans=112, cblasconjtrans=113,其中transa = cblasnotrans,  op( a ) = a,transa = cblastrans,  op( a ) = a',transa = cblasconjtrans,  op( a ) = a'。 transb類似。

const int m,矩陣a的行,矩陣c的行

const int n,矩陣b的列,矩陣c的列

const int k,矩陣a的列,矩陣b的行

const float alpha, const float beta,計算公式中的兩個引數值,如果只是計算c=a*b,則alpha=1,beta=0

const float  *a, const float  *b, const float  *c,矩陣abc的資料

const int lda, const int ldb, const int ldc,在blas的文件裡,這三個引數分別為abc的行數,但是實際使用發現,在cblas裡應該是列數。

我在這裡計算兩個簡單矩陣的乘法。

a:1,2,3

4,5,6

7,8,9

8,7,6

b:5,4

3,21,0

程式**:

//因為程式是c++,而cblas是c語言寫的,所以在此處用extern關鍵字

extern"c"

#includeusingnamespace std;

int main(void) ;

constfloat b[k*n]=;

float c[m*n];

cblas_sgemm(order, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);

for(int i=0;i

在編譯的時候需要帶上cblas_linux.a和blas_linux.a,比如,

g++ main.cpp cblas_linux.a blas_linux.a -o main

當然,這裡假定是這兩個.a檔案是放在可以直接訪問的位置,或者寫全路徑也可以。

這種做法在centos.5下順利通過,但是在我的ubuntu.7.10下出了問題,blas_linux.a正常編譯生成,但在鏈結的時候出了錯誤,所以只好從源裡安裝了atlas,sudo apt-get install atlas3-base,在/usr/lib/atlas/目錄下就會有libblas.*和liblapack.*庫檔案,只需要在鏈結的時候用這裡的blas庫檔案替換上文安裝的blas就可以正常編譯通過。

另外,在gsl下也有blas和cblas,在boost裡有ublas也提供cblas/blas的功能,有時間也拿來研究研究。

CBLAS編譯安裝與使用舉例

在github上看到有人用blas library優化自己的原始碼,對此產生了強烈興趣。準備自己動手實踐一下,網上搜尋了一大堆編譯安裝blas教程的資料,沒乙個靠譜的,編譯過程中遇到一堆的問題。因為自己沒有root許可權,所以只能在home目錄中本地編譯使用cblas,然後本地鏈結編譯得到的庫檔案到...

cblas安裝以及使用例項

c bdir 目錄下 的 cblibdir 將生成cblas的庫檔案 cblib cblas linux.a。在cblas的安裝目錄 c bdir 下的s rc目錄 中有個c blas h是包 括的cb las的 函式和常 量的頭文 件,使用 cbla s的時候 就需要這 個頭檔案 同時還 需要bl...

systemimager的安裝與使用

它是如何工作的?systemimager 應用 伺服器,被稱作映象伺服器,它取回乙個 golden client 的整個系統映象並將其部署到任何其它不同數量的客戶端系統中。golden client 系統是你按照自己的喜好定製的。你可以重新編譯核心,安裝軟體,按你的喜好調整任何配置檔案。si get...