[分享] C++呼叫Fortran BLAS的範例

看板C_and_CPP (C/C++)作者 (不認識)時間14年前 (2011/11/01 21:10), 編輯推噓5(5013)
留言18則, 8人參與, 最新討論串1/1
裝好lapack和blas後, 如何在C++程序裡引用矩陣相乘函數dgemm, 我在網路 上都找不到可以編譯成功的範例, 現在測試出來了特此分享. g++ dgemm_test.cpp -o out -L -llapack -lblas =====dgemm_test.cpp======================================= #include <iostream> extern "C" void dgemm_(const char*,const char*,const int*,const int*,const int*,const double*,const double*,const int*,const double*,const int*,const double*,const double*,const int*);//C++程序必須要宣告此行!!!!! using namespace std; int main() { char TransA='N'; char TransB='N'; const int M=4; const int N=2; const int K=3; const double alpha=1; const bdouble beta=0; const int lda=M; const int ldb=K; const int ldc=M; const double A[K*M]={1,2,3,4,5,6,7,8,9,8,7,6}; const double B[K*N]={5,4,3,2,1,0}; double C[M*N]; dgemm_(&TransA, &TransB, &M, &N, &K, &alpha, &A[0], &lda, &B[0], &ldb, &beta, &C[0], &ldc); for(int i=0;i<M;i++){ for(int j=0;j<N;j++) { cout<<C[i*N+j]<<"\t"; } cout << endl; } return 0; } ==========./out, Output is=========================== 52 58 64 70 7 10 13 16 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.76.93.247

11/01 21:13, , 1F
版主.這個可以收錄嗎?
11/01 21:13, 1F

11/01 21:27, , 2F
name mangling 真討人厭
11/01 21:27, 2F

11/01 22:31, , 3F
推分享:)
11/01 22:31, 3F

11/01 22:51, , 4F
推分享 :)
11/01 22:51, 4F

11/01 22:51, , 5F
推 @@ 熱心感人...
11/01 22:51, 5F

11/01 22:51, , 6F
另外推 eigen2
11/01 22:51, 6F

11/01 22:53, , 8F
哇勒什麼時候出 3 了 -_____-
11/01 22:53, 8F

11/01 22:54, , 9F
推 eigen :)
11/01 22:54, 9F

11/01 23:41, , 10F
不是應該用 #ifdef __cplusplus extern "C" { 嗎?
11/01 23:41, 10F

11/02 04:11, , 11F
樓上是的,養成這種習慣對以後會比較方便.
11/02 04:11, 11F

11/02 10:42, , 12F
extern 裡可以放 include "cblas.h"
11/02 10:42, 12F

11/04 03:38, , 13F
樓上,我是使用Fortran Blas,非Cblas.也就是說:若我用
11/04 03:38, 13F

11/04 03:40, , 14F
cblas_dgemm,那我就得include "cblas.h".在編譯的時候還要
11/04 03:40, 14F

11/04 03:42, , 15F
把Cblas的函數庫(cblas_LINUX.a)包含進來,再加上原本的庫:
11/04 03:42, 15F

11/04 03:44, , 16F
g++ dgemm_test.cpp -o out PATH/cblas_LINUX.a -L -lblas
11/04 03:44, 16F

11/04 03:44, , 17F
-llapack -lgfortran
11/04 03:44, 17F

11/04 03:45, , 18F
最後一個flag(gfortran)視情況加
11/04 03:45, 18F
文章代碼(AID): #1Eh--zn1 (C_and_CPP)
文章代碼(AID): #1Eh--zn1 (C_and_CPP)