例如,当累加不同矩阵向量乘法的结果时(即使只有一个累加元素,这也是您在 BLAS 中所做的事情),一个形式上从零向量开始。但是没有无开销的方法可以直接在 CUDA 设备内存上分配一个零数组(或者是否存在?),因此想到的解决方案是简单地采用任意数字的数组,而不是将其初始化为 0 , 将值传递给orbeta = 0.
的第一次调用。毕竟,如果它有那个参数“为什么不使用它”。cublas<t>gemv
cusparse<t>csrmv
这是
- 一个好主意?或者情况β = 1 是否以这样的方式进行了优化,以提供整体更好的性能来将数组初始化为 0 然后使用调用
cusparseDcsrmv(..., 1., zeroes_array)
? - 安全的?天真地,浮点作为 ℝ 元素的表示应该满足x ⋅ 0 = 0 ∀ x,但是这种天真的处理在处理浮点时当然通常是相当致命的。我很确定当数组先前用于具有相同数据类型的其他一些操作时,结果表现良好,但它对于新分配的设备内存的单元化块也安全吗?
我主要对稀疏情况感兴趣,因为对于稠密矩阵,乘法的O ( n ² ) 复杂性使得不必过多考虑向量的O ( n ) 分配的性能。