代码之家  ›  专栏  ›  技术社区  ›  avgn

blas/cublas如何在日常生活中处理α和β因子?

  •  1
  • avgn  · 技术社区  · 8 年前

    许多线性代数例程的参数是alpha和beta等常量。例如 cublas?GEMM 执行以下操作:

    C:=alpha*op(A) OP(B)+β C

    假设我将beta设置为0。

    1. 库布拉斯还会执行不必要的标量矩阵乘法和矩阵矩阵加法吗?其他的库呢,比如blas/lapack/mkl?

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

    3. 对于alpha/beta是否还有其他优化值?例如,假设我改为设置beta=1,是否将跳过按beta操作缩放?

    4. 为什么 cuBLAS documentation 和 BLAS documentation 在dgemm中指定这些系数为 const double 但在 examples 一 double 值传递给他们?有什么区别?

    如果这些图书馆以我描述的方式浪费了操作,我会感到惊讶,但是除了库布拉斯的文档中提到的:

    如果beta==0,则c不必是有效输入。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Morten Jensen dbush    8 年前

    甚至参考实现也在这里进行了优化。无论alpha或beta的值如何,都不会对执行do操作进行认真的实现。

    1. 不,不会的。
    2. 不适用
    3. 离开吧。 beta=0. 忽略c。 beta=1. 跳过缩放
    4. 原因是与Fortran兼容。没有 const F90之前的Fortran中的变量。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. 等

    推荐文章