【发布时间】:2013-12-14 17:01:55
【问题描述】:
我在一个小矩阵上尝试库函数 Cublas_Dgemm(),但它并没有达到我的预期。
所以我通过以下方式声明和初始化矩阵:
double alpha = 1.0, beta = 0.0;
double * sa = (double *)malloc(6*sizeof(double));
double * sb = (double *)malloc(6*sizeof(double));
double * sc = (double *)malloc(4*sizeof(double));
for( a = 0; a<2; a++)
for (b = 0; b < 3; b++){
sa[a*3+b] = a+b+1.0;
sb[a*3+b] = a+b+1.0;}
为了记录,我也试过了
for( a = 0; a<2; a++)
for (b = 0; b < 3; b++){
sa[IDX2F(a, b)] = a+b+1.0;
sb[IDX2F(a, b)] = a+b+1.0;}
在哪里
#define IDX2C(i,j,ld) (((j)*(ld))+(i))
这给了我:
萨:
1.00 2.00 3.00
3.00 2.00 3.00
某人:
1.00 2.00
3.00 2.00
3.00 4.00
然后我在 GPU 上分配内存如下:
double *dsa, *dsb, *dsc;
cudaMalloc((void **) &dsa, 6*sizeof(*sa));
cudaMalloc((void **) &dsb, 6*sizeof(*sb));
cudaMalloc((void **) &dsc, 4*sizeof(*sc));
cublasSetMatrix(2, 3, sizeof(*sa), sa, 2, dsa, 2);
cublasSetMatrix(3, 2, sizeof(*sb), sb, 3, dsb, 3);
cublasDgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, 2, 2, 3, &alpha, dsa, 2, dsb, 3, &beta, dsc, 2);
cublasGetMatrix(2, 2, sizeof(*sc), dsc, 2, sc, 2);
但是,当我打印矩阵 Sc 时,我得到了
sc:
16.00 18.00
23.00 26.00
应该是什么时候(根据matlab):
16.00 18.00
18.00 22.00
我不知道为什么我会得到这个错误的答案,有人会发现我可能犯的错误吗?非常感谢!
【问题讨论】:
-
除了@Robert Crovella 的回答,请注意您在问题中报告的
sa的值不正确(可能是错字)。根据初始化循环,它们与sb相同,都是正确的。