簡體   English   中英

在BLAS中使用較少的矩陣

[英]Using less matrices with BLAS

我對BLAS相當陌生(將OpenBLAS與C ++和VisualStudio結合使用)

我知道dgemm執行C < -alpha * op(A)* op(B)+ beta * C

我正在嘗試為此保存一些分配: B <-1 * op(A)* op(B)+ 0 * B

換句話說,將結果放入B矩陣中

但是使beta = 0並在C的位置重復B會導致答案為零。

有沒有辦法做到這一點?

我正在使用的代碼:

double* A = new double [3*3]; //3 rows x 3 columns

A[0] = 8;
A[1] = 3;
A[2] = 4;
A[3] = 1;
A[4] = 5;
A[5] = 9;
A[6] = 6;
A[7] = 7;
A[8] = 2;

double* v = new double[3]; //3 rows x 1 column

v[0] = 3;
v[1] = 5;
v[2] = 2;

double* foo = new double[3]; //3 rows x 1 column

cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
    3, 1, 3,
    1,
    A, 3,
    v, 3,
    0,
    foo, 3); // makes foo = [41 ; 48 ; 61], **right**

cblas_dgemm(CblasColMajor, CblasTrans, CblasTrans,
    3, 1, 3,
    1,
    A, 3,
    v, 3,
    0,
    v, 3); // makes v = [0 ; 0 ; 0], **wrong**

BLAS dgemm功能文檔指出,只有C矩陣參數同時用於輸入和輸出,並被運算結果覆蓋。 由於僅將B定義為輸入,因此BLAS實現可以假定不應對其進行修改。

將B和C設置為相同的數據指針可能會觸發您正在使用的實現的一些錯誤驗證,並返回清零的結果來表明這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM