BLAS/cuBLAS 如何在他们的例程中处理 alpha 和 beta 因素?

How do do BLAS/cuBLAS treat the factors alpha and beta in their routines?

许多线性代数例程都将常量(例如 alpha 和 beta)作为参数。例如 cublas?GEMM 执行以下操作:

C := alpha*op( A )op( B ) + betaC

假设我将 beta 设置为 0。

  1. cuBLAS 还会执行不必​​要的标量-矩阵乘法和矩阵-矩阵加法吗? BLAS/LAPACK/MKL 等其他库呢?

  2. 如果没有执行必要的操作:我需要做些什么来确保这一点,还是自动避免?

  3. alpha/beta 是否有其他值可以进行其他优化?例如,假设我改为设置 beta=1,是否会跳过 beta 操作的缩放?

  4. 为什么cuBLAS documentation and BLAS documentation specify these factors in DGEMM as const double but in examples一个double值传给他们?有什么区别?

如果这些库确实以我描述的方式浪费操作,我会感到惊讶,但除了 cuBLAS 文档提到的以外,我没有在任何地方找到关于它的明确讨论:

if beta == 0 then C does not have to be a valid input.

即使是参考实现也在这里进行了优化。无论 alpha 或 beta 的值如何,都没有认真执行操作。

  1. 不,不会。
  2. N/A
  3. 只留下 beta=0. 忽略 C。beta=1. 跳过缩放
  4. 原因是与 FORTRAN 的兼容性。在 F90 之前的 FORTRAN 中没有 const 变量。 BLAS 接口是在 F90 之前定义的,每个人都遵守约定。我想拥有一个带有适当关键字的 C 接口,请查看特定于 C 的接口,例如 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.