void cblas_zgemm(CBLAS_LAYOUT layout,
CBLAS_TRANSPOSE opA,
CBLAS_TRANSPOSE opB,
const int M, <-------------- I_Size of op(A)
const int N, <-------------- J_Size of op(B)
const int K, <-------------- J_Size of op(A)
const void* alpha,
const void* A,
const int lda,
const void* B,
const int ldb,
const void* beta,
void* C,
const int ldc);
1条答案
按热度按时间ubby3x7f1#
**A/CN.9/2005/10/Add.1/Add.1/Add.2/Add.1/Add.2/Add.2/Add.1/Add.2/Add.1/Add.2/Add.
在给出答案之前,为了更清楚地说明这一点,重要的是要记住这一事实:
而
备注:
为了避免这种歧义,我通常使用用途:
行大小为I_size列大小为J_size*
B/答案
B.1/ gemm
字符串
在动词中,如果TRANSA = 'T',则必须取转置A矩阵的维数。
调用
cblas_zgemm
的实现可能如下所示:型
B.2/内存布局
您还必须考虑内存布局。有两种可能性:
ld*J_size
的数组,A的值为A[i+ld*j]
,0 ≤ i < I_size,0 ≤ j < J_sizeI_size*ld
的数组,A的大小为A[j+ld*i]
,0 ≤ i < I_size,0 ≤ j < J_size(其中ld是前导维)
更新内容:
Layout=RowMajor
的任何地方都可以使用(例如,请参阅lapacke_dgesv_work()代码)。B.3/矩阵维数
如果你的矩阵总是像3x 10那么小,那么lapack不是一个好的选择(为了性能)。考虑使用像Eigen或Blaz这样的库。