我可以在 cblas_gemm(...) 中传递与 "C" 和"A"矩阵相同的矩阵指针吗?

Can I pass the same matrix pointer as both the "C" and "A" matrix in cblas_gemm(...)?

本文关键字:指针 我可以 gemm cblas      更新时间:2023-10-16

我想用值C*B更新C。我还想用值 C*C 更新 C。

这样做安全吗?我不想给我的学生提供糟糕的代码。我目前正在将临时结果从 cblas_gemm(...) 复制回 C 矩阵...这很慢。

如果可以

安全地使用相同的矩阵作为输入和输出,则 BLAS 实现需要使用临时工作区。由于您没有提供这样的工作区,因为函数没有请求一个工作区,我们可以得出结论,您不能使用相同的矩阵作为输入和输出。

事实上,如果 BLAS 例程将接受一个参数作为输入和输出,那么它将通过使用一个参数而不是两个参数并记录该参数同时用于输入和输出来实现。

您说使用临时输出变量然后在 BLAS 调用后复制很慢。但是,与矩阵乘法相比,该复制操作应该是微不足道的。您确定拷贝是瓶颈吗?你计时了吗?

BLAS 标准(可在此处获得)只是说:

该例程执行一般矩阵矩阵乘法,其中....A、B 和 C 是一般矩阵。

所以,我会说它是实现定义的,你可以假设这样做可能是不安全的。 但是,如果您使用的是特定实现,则始终可以检查该实现的来源。

或者,正如评论者所建议的那样,SYRK可能会做你想做的事。

相关文章: