例如累积不同矩阵向量乘法的结果(即使只有一个累积元素,这就是你在BLAS中所做的),一个正式以零向量开始。但是没有直接在CUDA设备内存上分配零数组的无开销方法(或者在那里?),所以跳到脑海的解决方案是简单地采用具有任意数字的数组,而不是将其初始化为0 ,将值beta = 0.
传递给cublas<t>gemv
或cusparse<t>csrmv
的第一个电话。毕竟,如果它有参数“为什么不使用它”。
这是
cusparseDcsrmv(..., 1., zeroes_array)
提供整体更好的性能?我主要对稀疏情况感兴趣,因为对于密集矩阵, O ( n ²)乘法的复杂性使得不必过多地对性能进行推理向量的 O ( n )分配。
答案 0 :(得分:1)
这应该是完全安全的,并且一直都在做;任何在β= 0时行为不正确的包都会有严重的错误。
csrmv的cusparse文档特别说“如果beta为零,则y不必是有效输入”,LAPACK表示* gemv类似的东西(“当BETA提供为零时,Y不需要设置输入“)
对于优化,可能是beta = 1和beta = 0的情况可能适用于任何实现的特定优化代码路径,但可能不会;可能如果没有,也不会。