我想用值C * B更新C.我还想用值C * C更新C.
这样做是否安全?我不想给我的学生不好的代码。我目前正在将cblas_gemm(...)的临时结果复制回C矩阵......这很慢。
答案 0 :(得分:1)
如果使用相同的矩阵作为输入和输出是安全的,BLAS实现将需要使用临时工作空间。由于您没有提供这样的工作空间,因为函数没有请求,我们可以得出结论,您不能使用相同的矩阵作为输入和输出。
实际上,如果BLAS例程将接受一个参数作为输入和输出,那么它将通过使用一个参数而不是两个参数并记录该参数用于输入和输出来实现。
你说使用临时输出变量然后在BLAS调用之后复制很慢。但是,与矩阵乘法相比,复制操作应该是微不足道的。你确定副本是瓶颈吗?你有时间吗?
答案 1 :(得分:0)
BLAS标准(available here)只是说:
例程执行一般矩阵矩阵乘法,其中...... A,B和C是一般矩阵。
所以,我会说它是实现定义的,你可以认为这样做可能不安全。但是,如果您使用的是特定实现,则可以随时检查该实现的来源。
或者,正如评论者所说,SYRK可能会做你想做的事。