如果A是一个n x n矩阵并且x是一个维度为n的向量,那么是否可以将xGEMV
作为参数传递给x
和y
参数,用beta=0
来实现操作x ← A ⋅ x?
我对带有 C 接口的 Cublas 实现特别感兴趣。
不。对于 Fortran,它与实现无关 - 在 Fortran 中,它违反了语言标准,因为它违反了语言标准,除非这些参数是 Intent(In)。因此,如果接口具有 Intent(Out)、Intent(InOut) 或没有 Intent 的虚拟参数,则在调用子程序时应始终为相应的实际参数使用单独的变量。
不。
输出的每个元素取决于输入向量的所有元素x
例如:如果x
是输入,y
是输出,A
是矩阵, 的i
第一个元素y
将按以下方式生成。
y_i = A_i1*x_1 + A_i2 * x_2 ... + A_in * x_n
所以如果你x_i
用上面的结果覆盖,其他x_r
依赖的x_i
将不会收到正确的输入并产生不正确的结果。
编辑
我打算发表评论,但它变得太大了。所以这就是为什么上述推理也适用于并行实现的解释。
除非每个并行组/线程都制作原始数据的本地副本,在这种情况下原始数据可以被破坏,否则这条推理线成立。
但是,这样做(制作本地副本)仅在以下情况下才实用且有益
笔记: