码迷,mamicode.com
首页 > 其他好文 > 详细

blas中dgemm_的用法

时间:2015-06-15 23:48:54      阅读:694      评论:0      收藏:0      [点我收藏+]

标签:

blas中函数参数实在是太多,想要愉快的使用最好还是封装下

一个矩阵相乘dgemm_函数就要13个参数.......

fortran中是按列存储的矩阵,而c++中是按行存储的,虽然与cblas可以选择按什么方式存储,但就是不想用


/*
*****************/ //a 4行2列 //b 2行3列 //c 4行3列 /******************/ // 4 2 3 void myDgemm(double* a, double* b, double* c, int m, int k, int n) { char transa = N, transb = N; double alpha = 1.0, beta = 0.; dgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &n, a, &k, &beta, c, &n); } int _tmain(int argc, _TCHAR* argv[]) { /* a = 1 2 b = 2 1 0 c = 14 19 14 3 4 6 9 7 30 39 28 1 5 32 46 35 6 2 24 24 14 */ // 按列存储a可以看成是矩阵a的转置 按列存储的b可以看成是矩阵b的转置 // a(T) = 1 3 1 6 (b)T = 2 6 // 2 4 5 2 1 9 // 0 7 // Tb和Ta就是b和a的数据按列存储的结果 // 所以b的转置乘以a的转置 = (b)T*(a)T = (ab)T = (c)T // 得出的结果便是c的转置(c)T,而又由于fortran中是按列存储,所以在c/c++里得出的就是按行存储的c double a[8] = { 1, 2, 3, 4, 1, 5, 6, 2 }; double b[6] = { 2, 1, 0, 6, 9, 7 }; double c[12] = { 0 };

myDgemm(a,b,c, 4, 2, 3)
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{ cout
<< c[i * 3 + j] << " ";
}

cout << endl;
}
cout << endl; getchar(); return 0; }

 

blas中dgemm_的用法

标签:

原文地址:http://www.cnblogs.com/nkzhangkun/p/4579480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!