许多线性代数例程的参数是alpha和beta等常量。例如 cublas?GEMM 执行以下操作:
C:=alpha*op(A) OP(B)+β C
假设我将beta设置为0。
库布拉斯还会执行不必要的标量矩阵乘法和矩阵矩阵加法吗?其他的库呢,比如blas/lapack/mkl?
如果不执行必要的操作:我需要做些什么来确保这一点,还是自动避免?
对于alpha/beta是否还有其他优化值?例如,假设我改为设置beta=1,是否将跳过按beta操作缩放?
为什么 cuBLAS documentation 和 BLAS documentation 在dgemm中指定这些系数为 const double 但在 examples 一 double 值传递给他们?有什么区别?
const double
double
如果这些图书馆以我描述的方式浪费了操作,我会感到惊讶,但是除了库布拉斯的文档中提到的:
如果beta==0,则c不必是有效输入。
甚至参考实现也在这里进行了优化。无论alpha或beta的值如何,都不会对执行do操作进行认真的实现。
beta=0.
beta=1.
const
sblas_dgemm
以下是的参考实现 DGEMM . http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f_source.html . 寻找 Quick return if possible. , And if alpha.eq.zero. 等
DGEMM
Quick return if possible.
And if alpha.eq.zero.