如何链接英特尔mkl库下载,只是cblas

【笔记】【原】Ubuntu Linux 12.04 64位下Intel Math Kernel Library (MKL) 2013安装以及使用原文链接:转载请注明出处。 实验环境: Ubuntu 12.04 LTS 64位安装软件:
仅记录2013版
新版本类似常常在论文中看到Deep Learning方法实现是使用英特尔的MKL库加速矩阵运算。跟着师兄的脚步,快快安装起来~*安装与配置*1. 注册在Intel官网上,注册一个帐号。我使用学校edu的邮箱,申请到了Math Kernel Library(MKL)的免费下载权(MKL的位置比较深,需要好好找一下)。稍后,Intel会发来一封邮件,里边包含软件的注册码,同时会附上下载链接。内容大致如下图2. 下载点击邮件中的下载链接即可下载压缩包。大致1G多。3. 解压 安装把压缩包解压,进入该文件夹。运行脚本进行安装:sudo ./install.sh4. 跟着提示一步步走先是欢迎提示,显示了安装的流程:接着需要接受证书:然后按照提示输入刚才邮件中的序列号,回车后提示激活成功:我同意了参与软件改善计划:然后选择安装路径,我使用了默认路径/opt/intel/,里边如果有东西,就会无视不同名文件和目录并覆盖同名文件和目录:(建议备份该路径原有的文件)之后有一个可选步骤,安装程序会检测系统环境,提示要得到最佳体验需要的先验程序,我选择忽略缺少的项目:接着就开始安装:几分钟之后,安装完毕,提示了一些关于软件使用的内容,建议留做以后参考: 5. 配置添加动态路径。 用管理员权限编辑文件 /etc/ld.so.conf .在其中加入文件刚刚安装的MKL的lib路径。我的路径是 /opt/intel/composer_xe_/compiler/lib/intel64 。然后是新配置生效:sudo ldconfig *使用*1.运行自带例子到路径 /opt/intel/composer_xe_/mkl/examples/cblas中,尝试编译运行自带的cblas程序。这一步用于验证安装是否成功。根据Makefile中的提示,用下面命令编译程序:sudo make libintel64 compiler=gnu编译结束后,出现 _results 文件夹。可以自行查看里边的可执行文件。 b2.书写自己的makefile根据刚才终端中输出的编译过程,我们可以学习到如何编译使用了MKL CBLAS的代码。如下图绿色框 安装到此为止~~
终于可以使用MKL CBLAS了! 其他:source /opt/intel/
composer_xe_添加环境变量/etc/profile========
更新============同样的方法在Ubuntu 14.04.3 LTS上试验有效。A mind needs books like a sword needs a whetstone.
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 13:25收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-18927人阅读
并行计算高性能计算HPC — MKL/IPP(3)
MKL实现了BLAS和Spare BLAS和BLAS-like的函数。这部分函数主要分为以下部分:
oBLAS Level 1 Routines (vector-vector operations)&
oBLAS Level 2 Routines (matrix-vector operations)&
oBLAS Level 3 Routines (matrix-matrix operations)&
oSparse BLAS Level 1 Routines (vector-vector operations).&
oSparse BLAS Level 2 and Level 3 Routines (matrix-vector and matrix-matrix operations)&
oBLAS-like Extensions&
(1)BLAS函数命名规则
&character& &name& &mod& ( )
character:
表示数据类型,一般为:s实数,单精度;c复数,双精度;d实数,单精度;z复数,双精度。有些函数会对character组合,比如sc、dz等等,组合的时候,第一个表示返回值,第二个字母表示参数。
对于BLAS level 1: 表示操作类型,比如?dot,?rot,?swap等函数。(说明:MKL手册中?开头的函数,这个问号就取代character,表示这一系列的函数。)
对于BLAS level 2和3: name反应了矩阵的参数类型,主要有ge(general matrix)、gb(general band matrix带状矩阵)、sy(symmetric matrix对称式矩阵)、sp(symmetric matrix (packed storage))、sb(symmetric band matrix)、he(Hermitian matrix埃尔米特矩阵,自共轭矩阵)、hp(Hermitian matrix (packed storage))、hb(Hermitian
band matrix)、tr(triangular matrix三角矩阵)、tp(triangular matrix (packed storage))、tb(triangular band matrix)等。
可选,提供操作的额外信息。不同的level的函数可取的值不一样,参考手册查看更多信息。
总结:可见MKL函数的命名规则是很清晰的。
(2)矩阵的保存方式
矩阵,在MKL中可以用一维或者二维的数组保存。
Full storage:用二维数组保存矩阵,矩阵的元素aij保存在数据元素的a(i,j)中。
Packed storage:用一维数组保存。
band storage for band matrices:用二维矩阵保存,带状矩阵。
(3)编程接口
MKL手册中发现函数说明都是Fortran的规范,比如BLAS里面的函数,事实上,MKL提供了和Fortran一样的函数接口。
C语言中,使用BLAS需要包含的头文件是:#include &mkl_blas.h&,其中的函数和Fortran接口是一致的。
为了使得接口更符合C语言的格式,MKL提供了一个C语言格式的函数接口,即CBLAS,需要包含#include &mkl_cblas.h&,其提供的接口函数名为Fortran函数名接口加上前缀&cblas_&的形式,但是实际上其参数返回值等可能会有一些不同,是为了更符合C语言的编程习惯。具体参考下一部分的例子即可知道,应该尽量采用C语言的接口形式,更容易理解和使用。
(3)BLAS Level 1举例
BLAS Level 1的函数用于进行向量-向量的操作。比如求向量元素的绝对值之和、向量相加、向量交换、向量元素最大值和最小值等等操作。
下面以?asum函数为例来了解:
res = sasum(n, x, incx)
res = scasum(n, x, incx)
res = dasum(n, x, incx)
res = dzasum(n, x, incx)
其中,不同的函数,其?部分不一样,表示其传递的参数类型不一样,上面已经分析过命名规则。这个函数用于对向量中的一组元素的绝对值求和,如果是复数参数,则其元素会计算实部和虚部的绝对值并求和。即res = |Re x(1)| + |Im x(1)| + |Re &x(2)| + |Im &x(2)|+ ... + |Re &x(n)| + |Im x(n)|。其中,参数n表示要参与计算的元素的个数,x为向量起始地址,incx为对向量的递增取值间隔,注意,使用时要自行保证不要出现越界。另外,上面的函数中n和incx都要求是指针类型,所以不符合C语言的编程习惯,可以使用C语言接口,从而符合习惯。参考下面的例子:
#include &stdafx.h&
#include &stdio.h&
#include &malloc.h&
#include &mkl_blas.h&
#include &mkl_cblas.h&
#define N 100
void initVector(float* v)
for(int i = 0;i & N;i++)
v[i] = -i*1.0f;
int main(int argc, char* argv[])
float* vector = (float*) malloc(sizeof(float)*N);
initVector(vector);
int a1 = N;
int incx1 = 1;
float ret1 = sasum(&a1, vector, &incx1); // FORTRAN 77接口形式
printf(&Result of sasum: %lf\n&, ret1);
int a2 = N/2;
int incx2 = 2;
float ret2 = sasum(&a2, vector, &incx2); // FORTRAN 77接口形式
printf(&Result of sasum: %lf\n&, ret2);
float ret3 = cblas_sasum(N, vector, 1);
//C接口形式
printf(&Result of sasum: %lf\n&, ret3);
free(vector);
这个例子,是计算一个单精度浮点数向量的。
下面是计算复数的例子:
#include &stdafx.h&
#include &stdio.h&
#include &malloc.h&
#include &mkl_cblas.h&
#define N 10
void initVector(MKL_Complex16* v)
for(int i = 0;i & N;i++)
v[i].real = -i*1.0f;
v[i].imag = i*1.0f;
int main(int argc, char* argv[])
MKL_Complex16* vector = (MKL_Complex16*) malloc(sizeof(MKL_Complex16)*N);
initVector(vector);
double ret3 = cblas_dzasum(N, vector, 1);
printf(&Result of sasum: %lf\n&, ret3);
free(vector);
还有其它一些BLAS Level 1的函数,都是用于处理vector-vecotr相关的BLAS问题的,更多内容参考MKL手册。
(4)BLAS Level 2
BLAS Level 2的函数,主要用于矩阵-向量(matrix-vector)操作。
(5)BLAS Level 3
BLAS Level 2的函数,主要用于矩阵-矩阵(matrix-matrix)操作。
二、Sparse BLAS
(1)命名规则
Level1 和Level2/3有不同的命名规则,详细参考手册。
(2)Sparse BLAS Level 1
主要用于针对压缩形式保存的稀疏向量的相关向量操作。
(3)&Sparse BLAS Level 2 and Level 3
Level 2 主要用于进行稀疏矩阵和密集向量之间的操作。
Level 3 主要用于稀疏矩阵和密集矩阵之间的操作。
三、BLAS-like Extensions
作为扩展,提供一些扩展的函数,进行一些数据操作等相关的函数,比如简单的向量加法得到一个新的向量等。
总结:这里主要是简单的了解了一下MKL手册中的BLAS and Sparse BLAS的基本内容,主要是举例BLAS Level1的例子,了解MKL函数的特点。另外,这些函数,不仅仅在MKL中有提供,这些都是“标准”的一些线性代数相关的函数,本身BLAS、LAPACK、ScaLAPACK等等的这些名称就是一些库的名称,都是在高性能领域很有名的库,MKL主要是对其进行了优化,所以,这些函数的接口都是和“标准”一致的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:574968次
积分:6763
积分:6763
排名:第2828名
原创:146篇
转载:12篇
评论:153条

我要回帖

更多关于 intel mkl 64位库下载 的文章

 

随机推荐