(原)mkl的cblas_sgemm和cblas_dgemm
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/5553336.html
参考网址:
mkl-11.3.2-developer-reference-c_0.pdf(intel官网下载)
http://goodluck1982.blog.sohu.com/94851969.html
void cblas_sgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const float alpha, const float *a, const MKL_INT lda, const float *b, const MKL_INT ldb, const float beta, float *c, const MKL_INT ldc); void cblas_dgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const double alpha, const double *a, const MKL_INT lda, const double *b, const MKL_INT ldb, const double beta, double *c, const MKL_INT ldc);
参考intel的官方pdf手册
计算:C := alpha*op(A)*op(B) + beta*C
注意:a、b、c指输入的缓冲区,A、B、C指真正需要计算的缓冲区(如果需要对一小块矩阵进行计算,这两组就不一样了)。
其中,op(X) 表示:
op(X) = X,原始矩阵
op(X) = ${{X}^{T}}$,转置矩阵
op(X) = ${{X}^{H}}$,共轭矩阵
A为m*k的矩阵(m行k列)
B为k*n的矩阵
C为m*n的矩阵
参数:
Layout:表示二维矩阵存储是按行优先(CblasRowMajor)还是列优先(CblasColMajor)。
C++里面是行优先存储的;fortran是列优先存储数据。(为了让fortran调用方便吧)
transa、transb:可为CblasNoTrans、CblasTrans、CblasConjTrans
m:矩阵a和c的行数
n:矩阵b和c的列数
k:矩阵a的列数,矩阵c的行数
lda:行优先 & 不转置时,$lda\ge \max (1,k)$
行优先 & 转置时,$lda\ge \max (1,m)$
由于用的是C++,不太可能会使用fortran,列优先就不管了(ldb和ldc也不考虑)
ldb:行优先 & 不转置时,ldb*k的矩阵,b矩阵左上角包含n*k的B矩阵
行优先 & 转置时,ldb*n的矩阵,b矩阵左上角包含k*n的B矩阵
ldc:行优先时,$ldc\ge \max (1,n)$
由于用的是C++,不太可能会使用fortran,列优先就不管了
如上面注意的地方所说,如果不是计算小块矩阵的话,实际上lda、ldb、ldc和各自的m、n、k相等(注意行优先和列优先)
小块的问题,可见参考网址。
(原)mkl的cblas_sgemm和cblas_dgemm的更多相关文章
- (原)mkl用到的函数
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5585301.html 计算 $C=\alpha *A*B+\beta *C$: void cblas_ ...
- (原)使用mkl计算特征值和特征向量
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5585271.html 参考文档:mkl官方文档 lapack_int LAPACKE_sgeev(in ...
- (原)使用mkl中函数LAPACKE_sgesv计算矩阵的逆矩阵
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5578027.html 参考文档:mkl的说明文档 lapack_int LAPACKE_sgesv(i ...
- Intel MKL函数之 cblas_sgemm、cblas_sgemm_batch
cblas_sgemm int m = 40; int k = 20; int n = 40; std::vector<float> a(m*k, 1.0); std::vector< ...
- 从 SVM 到多核学习 MKL
SVM是机器学习里面最强大最好用的工具之一,它试图在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.它的强大之处还在于,当样本在原特征空间中线性不可分,即找不到一个足够好的超平面时,可以利用核 ...
- cblas_sgemm cblas.h
BLAS(Basic Linear Algebra Subprograms)库,是用Fortran语言实现的向量和矩阵运算库,是许多数值计算软件库的核心, 但也有一些其它的包装, 如cblas是C语言 ...
- UBUNTU 16.04 + CUDA8.0 + CUDNN6.0 + OPENCV3.2 + MKL +CAFFE + tensorflow
首先说一下自己机子的配置 CPU:Intel(R) Core(TM) i5-5600 CUP @3.20GHz *4 GPU : GTX 1060 OS : 64bit Ubuntu16.04LTS ...
- VS2019配置MKL教程(Windows)
下载链接:https://software.intel.com/en-us/mkl 1.文件下载 官网注册后,选择MKL下载下来,安装到指定目录就行,不在多说. 2.配置文件 首先创建一个Window ...
- MKL库矩阵乘法
此示例是利用Intel 的MKL库函数计算矩阵的乘法,目标为:\(C=\alpha*A*B+\beta*C\),由函数cblas_dgemm实现: 其中\(A\)为\(m\times k\)维矩阵,\ ...
随机推荐
- hdu5348 MZL's endless loop(欧拉回路)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's endless loop Time Limit: 3000/1500 ...
- php统计文件夹大小
function dirsize($dir){ @$dh = opendir($dir); $size = 0; while($file = @readdir($dh)){ if($file!=&qu ...
- 关于Windows8.1更新后Sql Server服务消失的处理办法
前言 微软在17日发布了windows8.1,兴致勃勃地花了半天的时间更新了,不过不知所云的是,在20日又被卸下Windows Store.此为背景. 影响 更新完毕做开发的时候,发现SqlServe ...
- 火狐Firefox 浏览器 onblur() 并且alert()时文本被选中问题
说明:镜像是组成在线实验课程的基础环境,教师设计的实验绑定一个或多个镜像,就组成了一讲独立的在线实验课程. 镜像名称: 火狐Firefox 浏览器 onblur() 并且alert()时文本被 ...
- 设置ubuntu Android sdk环境变量
cd /etc/ sudo gedit profile 在后面把tools和platform-tools的路径追加进去即可 PATH=$PATH:/home/android_sdk/tools 然后再 ...
- .net mvc结合微软提供的FormsAuthenticationTicket登陆
一.Web.config <system.web> <compilation debug="true" targetFramework="4.5&quo ...
- 可以让javascript加快的脚本(收藏了)
<?php ob_start('ob_gzhandler'); header("Cache-Control: public"); h ...
- logstash 中的贪婪匹配
logstash 中的贪婪匹配: 10.252.142.174 - - [06/Sep/2016:08:41:36 +0800] "GET /api/validate/code/send?m ...
- 初识lucene
lucene的介绍网上有好多,再写一遍可能有点多余了. 使用lucene之前,有一系列的疑问 为什么lucene就比数据库快? 倒排索引是什么,他是怎么做到的 lucene的数据结构是什么样的,cpu ...
- ./scripts/feeds update -a OpenWrt大招系列
./scripts/feeds update -a Updating feed 'packages' from 'https://github.com/openwrt/packages.git' .. ...