许多线性代数例程都有常数,例如alpha和beta作为参数。例如cublas?GEMM执行以下操作:
C:= alpha * op(A) op(B)+ beta C
假设我将beta设置为0。
cuBLAS仍会执行不必要的标量矩阵乘法和矩阵矩阵加法吗?那么其他库(例如BLAS / LAPACK / MKL)又如何呢?
如果未执行必要的操作:我是否需要做一些事情来确保这一点,还是自动避免?
是否有其他优化的alpha / beta值?例如,假设我改为设置beta = 1,是否会跳过按beta操作进行缩放?
为什么cuBLAS documentation和BLAS documentation在DGEMM中将这些因子指定为const double
,但是在examples中却将double
值传递给它们?有什么区别?
如果这些库按照我描述的方式浪费了操作,我会感到惊讶,但是除了cuBLAS文档提到的内容之外,我没有找到关于它的明确讨论:
如果beta == 0,则C不一定是有效输入。
答案 0 :(得分:3)
即使参考实现在此处进行了优化。不管alpha或beta的值如何,都没有认真执行此操作。
<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.
可以跳过缩放beta=1.
变量。 BLAS接口是在F90之前定义的,每个人都遵循约定。我想要一个带有适当关键字的C接口,请查看特定于C的接口,例如const
。这是sblas_dgemm
的参考实现。
http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f_source.html。寻找DGEMM
,Quick return if possible.
等