0

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

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

4

2 回答 2

1

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

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

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

于 2012-04-24T05:42:14.583 回答
0

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

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

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

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

于 2012-04-24T05:16:19.747 回答