在Caffe的源码中有很多地方使用OpenBlas库进行矩阵运算,今天就简单讲一下我在使用cblas_dgemm()函数的使用时遇到的问题。
在网上查到的资料很多都是简单的说了下cblas_dgemm()函数的参数和功能,具体怎么用没有给出相应的代码,而且我对里面的转置也是很迷惑。先给大家几个博客地址:
官方例子:https://github.com/xianyi/OpenBLAS/wiki/User-Manual
很棒的以一个例子,我根据这个搞定的:http://blog.sina.com.cn/s/blog_4a03c0100101ethf.html
这个也不错:http://blog.csdn.net/g_spider/article/details/6054990
在看下面的内容之前,请先仔细阅读函数参数。
好了言归正传,讲讲几个大家不太熟悉的参数。
第一个参数是选择行主序还是列主序。那什么是行主序?什么又是列主序呢?如下所示
数组A[1,2,3,4,5,6,7,8,9]
如果我们想将A按照行主序(CblasRowMajor)展开成一个3*3的矩阵结果如下:
[1,2,3
4,5,6
7,8,9]
如果我们想将A按照列主序(CblasRowMajor)展开成一个3*3的矩阵结果如下:
[1,4,7
2,5,8
3,6,9]
其实我们发现按照行主序就是按照行遍历矩阵得到数组A,按照列主序就是按照列遍历矩阵得到数组A。
第二个参数:是不转置(CblasTrans or CblasNoTrans)
开始对这个参数很迷惑,后来发现其实很简单,这个参数是和前面的参数(行或列主序)配合使用的。举例:如果你已经选择CblasRowMajor 如果CblasTrans被选择