BLAS / cuBLAS如何在日常工作中处理因子α和β?

时间:2018-07-16 06:00:29

标签: c blas algebra cublas

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

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

假设我将beta设置为0。

  1. cuBLAS仍会执行不必​​要的标量矩阵乘法和矩阵矩阵加法吗?那么其他库(例如BLAS / LAPACK / MKL)又如何呢?

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

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

  4. 为什么cuBLAS documentationBLAS documentation在DGEMM中将这些因子指定为const double,但是在examples中却将double值传递给它们?有什么区别?

如果这些库按照我描述的方式浪费了操作,我会感到惊讶,但是除了cuBLAS文档提到的内容之外,我没有找到关于它的明确讨论:

  

如果beta == 0,则C不一定是有效输入。

1 个答案:

答案 0 :(得分:3)

即使参考实现在此处进行了优化。不管alpha或beta的值如何,都没有认真执行此操作。

  1. 不,不会。
  2. 不适用
  3. 只需离开<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="java:com.mypackage"> <xs:complexType name="MyAmazingBean"> <xs:sequence> <xs:element name="FieldNumberOne" type="xs:string" minOccurs="1"/> <xs:element name="Age" type="xs:string" minOccurs="1"/> </xs:sequence> </xs:complexType> </xs:schema> 即可忽略C。beta=0.可以跳过缩放
  4. 原因是与FORTRAN兼容。 F90之前的FORTRAN中没有beta=1.变量。 BLAS接口是在F90之前定义的,每个人都遵循约定。我想要一个带有适当关键字的C接口,请查看特定于C的接口,例如const

这是sblas_dgemm的参考实现。 http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f_source.html。寻找DGEMMQuick return if possible.