简单的 cblas gemm 代码但结果奇怪
Simple cblas gemm code but strange result
以下为c代码
const int M = 4;
const int N = 1;
const int K = 2;
const int LDA = M;
const int LDB = K;
const int LDC = M;
float input_data[2]{1, 1};
float weight_data[8]{1.1, 2.01, 3.001, 4.0001, 5.1, 6.01, 7.001, 8.0001};
float output_data[4];
cblas_sgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, M, N, K, 1, weight_data, LDA, input_data, LDB, 0, output_data, LDC);
预期结果为{6.2, 8.02, 10.002, 12.0002}。相反,我得到了 {4.101, 6.0101, 12.101, 14.0101}。
代码非常简单。文档查了很多遍,不知道哪里错了
能帮忙指出问题吗?提前致谢!
更新:
我试了 2*2 和 3*2 weight_data
,两个结果都是正确的。然而 4*2 weight_data
产生了错误的结果
原来是OpenBLAS的bug。我从没想过openblas可能有bug。它花了我两天。
以下为c代码
const int M = 4;
const int N = 1;
const int K = 2;
const int LDA = M;
const int LDB = K;
const int LDC = M;
float input_data[2]{1, 1};
float weight_data[8]{1.1, 2.01, 3.001, 4.0001, 5.1, 6.01, 7.001, 8.0001};
float output_data[4];
cblas_sgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, M, N, K, 1, weight_data, LDA, input_data, LDB, 0, output_data, LDC);
预期结果为{6.2, 8.02, 10.002, 12.0002}。相反,我得到了 {4.101, 6.0101, 12.101, 14.0101}。
代码非常简单。文档查了很多遍,不知道哪里错了
能帮忙指出问题吗?提前致谢!
更新:
我试了 2*2 和 3*2 weight_data
,两个结果都是正确的。然而 4*2 weight_data
产生了错误的结果
原来是OpenBLAS的bug。我从没想过openblas可能有bug。它花了我两天。