我可以在 cblas_gemm(...) 中传递与 "C" 和"A"矩阵相同的矩阵指针吗?
Can I pass the same matrix pointer as both the "C" and "A" matrix in cblas_gemm(...)?
我想用值C*B更新C。我还想用值 C*C 更新 C。
这样做安全吗?我不想给我的学生提供糟糕的代码。我目前正在将临时结果从 cblas_gemm(...) 复制回 C 矩阵...这很慢。
如果可以
安全地使用相同的矩阵作为输入和输出,则 BLAS 实现需要使用临时工作区。由于您没有提供这样的工作区,因为函数没有请求一个工作区,我们可以得出结论,您不能使用相同的矩阵作为输入和输出。
事实上,如果 BLAS 例程将接受一个参数作为输入和输出,那么它将通过使用一个参数而不是两个参数并记录该参数同时用于输入和输出来实现。
您说使用临时输出变量然后在 BLAS 调用后复制很慢。但是,与矩阵乘法相比,该复制操作应该是微不足道的。您确定拷贝是瓶颈吗?你计时了吗?
BLAS 标准(可在此处获得)只是说:
该例程执行一般矩阵矩阵乘法,其中....A、B 和 C 是一般矩阵。
所以,我会说它是实现定义的,你可以假设这样做可能是不安全的。 但是,如果您使用的是特定实现,则始终可以检查该实现的来源。
或者,正如评论者所建议的那样,SYRK可能会做你想做的事。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以制作指向智能指针的智能指针吗?
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- 我可以做些什么来改进指针向量中的此搜索?
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 如果我知道只会使用现有元素,我可以在数组开头之前传递指针吗?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 我可以在初始化之前使用 std::array 成员变量中的 data() 指针吗?发出警告
- 为什么我可以通过原始指针而不是shared_ptr来修改对象
- 为什么我可以通过野生指针调用成员函数
- 在C++我可以在不在本地声明结构的情况下将结构作为指针传递吗?
- 为什么我可以取消引用指向抽象类的指针?
- 我可以保证以负偏移访问指针吗?
- 我可以更改将引用参数传递到指针中并使其正常工作的函数的输入(C、C++)吗?
- 我可以从构造函数内传递会员函数指针吗?
- 为什么我可以更改指针的常数(const char *)槽的值
- 我可以依靠 initializer_list::const_iterator 是一个普通的指针吗?