使用较少的矩阵与BLAS
Using less matrices with BLAS
本文关键字:BLAS 更新时间:2023-10-16
我对BLAS很陌生(使用OpenBLAS与c++和VisualStudio)
我知道dgemm执行C <- alpha * op(A) * op(B) + beta * C
我试图节省一些分配这样做:B <- 1 * op(A) * op(B) + 0 * B
换句话说,把结果放到B矩阵中,
BUT令beta = 0并在C位置重复B,结果为0。
有办法让它正确吗?
我正在使用的代码:
double* A = new double [3*3]; //3 rows x 3 columns
A[0] = 8;
A[1] = 3;
A[2] = 4;
A[3] = 1;
A[4] = 5;
A[5] = 9;
A[6] = 6;
A[7] = 7;
A[8] = 2;
double* v = new double[3]; //3 rows x 1 column
v[0] = 3;
v[1] = 5;
v[2] = 2;
double* foo = new double[3]; //3 rows x 1 column
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
3, 1, 3,
1,
A, 3,
v, 3,
0,
foo, 3); // makes foo = [41 ; 48 ; 61], **right**
cblas_dgemm(CblasColMajor, CblasTrans, CblasTrans,
3, 1, 3,
1,
A, 3,
v, 3,
0,
v, 3); // makes v = [0 ; 0 ; 0], **wrong**
BLAS dgemm函数文档说明,只有C矩阵参数同时用于输入和输出,并被操作结果覆盖。由于B只是为输入定义的,因此BLAS实现可以假设它不应该被修改。
将B和C设置为相同的数据指针可能会触发对您正在使用的实现的某些错误验证,返回归零结果以指示
相关文章:
- BLAS 2 级波段矩阵向量积多个向量
- 检查并行化 BLAS 例程的结果
- BLAS 函数 Dgemm,但所有矩阵都乘以标量
- Blas 和 Lapack 库是否有本机 C++(不是 C)接口?
- 安装Blas和Cmakelists的目的麻烦
- 安卓Studio 3.0的BLAS库dpendency问题
- 推广到多个BLAS/LAPACK库
- Blas产品DGEMM具有CBLASTRANS选项出乎意料的行为
- MKL 或 BLAS 例程,用于将矢量乘以标量错位
- 为什么argmax abs有blas子程序(ISAMAX),而argmax没有
- 最适合矩阵运算的 BLAS 包
- BLAS 替换会导致 Linux 中的矩阵乘法失败,但在 Windows 中则不然
- 在 Windows Eclipse 中使用 DGEMM BLAS
- const void* 作为 C++ 中 MKL Blas 例程的复数
- BLAS与CMake的链接错误
- 是否可以在不重新编译程序的情况下在BLAS库之间切换
- 矩阵乘法的快速LAPACK/BLAS
- 编译过程中无法从加速框架中链接BLAS -OS Yosemite 10.0.5
- 在Windows 7的Qt Creator项目中链接MLPACK, Armadillo和LAPACK/BLAS
- 与LAPACK和BLAS的链接会导致c++异常无法处理