收藏 分享(赏)

mkl概览-杨全胜.ppt

上传人:精品资料 文档编号:8506582 上传时间:2019-06-30 格式:PPT 页数:29 大小:483.50KB
下载 相关 举报
mkl概览-杨全胜.ppt_第1页
第1页 / 共29页
mkl概览-杨全胜.ppt_第2页
第2页 / 共29页
mkl概览-杨全胜.ppt_第3页
第3页 / 共29页
mkl概览-杨全胜.ppt_第4页
第4页 / 共29页
mkl概览-杨全胜.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、性能库:Intel 数学核心库(MKL),杨全胜 http:/ 性能特性 使用库 库内容,3,库内容,性能库: Intel MKL Intel 数学核心库是一个广泛的科学/工程数学库 为Intel processors优化 他的多线程可以在SMP的机器上有效的使用,4,介绍,Intel数学核心库目的 性能,性能,还是性能! Intel公司的工程、科学和金融数学库 访问: 解算程序 (BLAS, LAPACK) 特征向量/特征值求解(BLAS, LAPACK) 一些量子化学的需要(dgemm) 偏微分方程, 信号处理, 地震, 固态物理(FFTs) 常规科学,金融科学向量超越函数 (VML)和向

2、量随机数发生器(VSL) 为Intel的当前和未来处理器做调整,5,介绍,Intel 数学核心库目的 不能做的 但是不能用Intel 数学核心库(Intel MKL) 来做 不要在“小”计算上用Intel MKL 不要在小n上调用向量数学函数.,X Y Z W,X Y Z W,=,4x4 变换矩阵,几何变换,6,介绍,Intel 数学核心库内容 BLAS (基本线性代数子例程) Level 1 BLAS 向量-向量操作 15个函数类型 48个函数 Level 2 BLAS 矩阵-向量操作 26个函数类型 66个函数 Level 3 BLAS 矩阵-矩阵操作 9个函数类型 30个函数 Exten

3、ded BLAS 对稀疏向量的level 1 BLAS 8个函数类型 24个函数,7,介绍,Intel 数学核心库内容 LAPACK (线性代数包) 解算程序进而特征值求解. 全部数百个子例程 有总数超过1000的用户可调用和支持例程 DFTs (离散福利叶变换) 混合基数, 多维变换 多线程 VML (矢量数学库) 矢量超越函数集 大多数的libm函数,但是更快 VSL (矢量统计学库) 矢量随机数发生器集,8,介绍,Intel 数学核心库内容 BLAS和LAPACK* 都是Fortran. 传统的高性能计算 VSL和VML有Fortran和C接口 DFTs有Fortran 95和C接口 c

4、blas接口:更便于C/C+程序员调用BLAS,9,介绍,Intel 数学核心库(Intel MKL) 环境支持32位和64位Intel处理器 一个例子和测试的大集合 大量的文档,10,内容,介绍 性能特性 使用库 库内容,11,性能特性,资源的有限优化 所有优化的目标是速度最大化 有限的资源优化 消耗一个或者更多的系统资源:CPU: 寄存器使用, 浮点单元Cache: 尽可能久地保持cache中的数据; 处理cache更迭 TLBs: 最大限度地使用每页上的数据存储带宽: 尽可能少地访问存储器.计算机: 用所有可用的处理器执行线程 系统: 使用所有的可用节点(机群软件).,12,性能特性,线

5、程化 大部分Intel 数学核心库(Intel MKL) 能够线程化,但是: 内存带宽是有限的资源 线程化level 1和level 2 BLAS 基本上没效果( O(n) ) 有大量的线程化的机会: Level 3 BLAS ( O(n3) ) LAPACK* ( O(n3) ) FFTs ( O(n log(n) ) VML, VSL ? 依赖处理器和函数 所有的线程化都是使用OpenMP*. 所有Intel MKL都被设计和编译成对线程化是安全的,13,内容,介绍 性能特性 使用库 库内容,14,使用库,连接Intel 数学核心库(Intel MKL) 方案1: ifort, BLAS,

6、 IA-32处理器: ifort myprog.f mkl_c.lib 方案2: CVF, LAPACK, IA-32处理器: f77 myprog.f mkl_s.lib 方案3: 使用一个在运行时连接的DLL来静态连接一个C程序: link myprog.obj mkl_c_dll.lib 注意:基于处理器的优化二进制代码将在运行的时候执行,15,使用库,矩阵乘法 自己做卷积或用点积,for( i = 0; i n; i+ )for( j = 0; j m; j+ )for( k = 0; k kk; k+ )cij += aik * bkj; ,for( i = 0; i n; i+ )

7、for( j = 0; j m; j+ )cij = cblas_ddot( n, ,Roll Your Own,ddot,16,使用库,矩阵乘法 DGEMV/DGEMM,for( i = 0; i n; i+ )cblas_dgemv( CBLAS_RowMajor, CBLAS_NoTrans, m, n,alpha, a, lda, ,dgemv,Cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, m, n, kk, alpha, b, ldb, a, lda, beta, c, ldc );,dgemm,17,使用库,实验 1

8、: DGEMM 比较分别用C源码,DDOT,DGEMG和DGEMM实现矩阵乘法的性能 练习在MKL/BLAS中控制线程的能力,18,内容,介绍 性能特性 使用库 库内容,19,库内容,LAPACK*中优化Intel 数学核心库 很多重要的LAPACK优化: 线程化 有效地使用多处理器和多核 递归分解 减少串行时间(Amdahls law: t = t串行 + t并行/p) 代码中进一步扩展阻塞到整个列的块,以提高局部性 无需运行时库的支持 NETLIB LAPACK有很多调用函数提高了对运行时库函数的支持,这些函数都在Intel MKL中,所以不再需要运行时库,可以和任何编译器方便的链接、,2

9、0,库内容,离散福利叶变换(DFTs) 1维,2维,3维(受编程语言限制) 支持多线程 为内存的有效利用而进行混合基数变换,并满足许多物理问题的需要。可以指定任何规模的变换,但并不是所有规模的变换运行的同样快 用户指定比例,变换的符号 嵌入矩阵的变换,一次允许调用多个一维变换 C和F90接口,21,库内容,用Intel 数学核心库做离散福利叶变换 基本上是3个步骤 创建一个描述器.Status = DftiCreateDescriptor(MDH, ) 提交描述器(实例化它).Status = DftiCommitDescriptor(MDH) 执行转换.Status = DftiComput

10、eForward(MDH, X) 释放描述器(可选地),22,库内容,矢量数学库(VML)的功能/问题 矢量数学库: 矢量超越函数 像libm,但是更好(更快) 接口: 有Fortran和C两个接口 多种精确度 高精度( 1 ulp ) 较低精度, 更快( 4 ulps ) 特殊值的处理(-a), sin(0),等 错误处理 这里不能复制libm,23,库内容,VML: 是怎样的? 它对金融代码很重要(蒙托卡罗模拟法). 指数, 对数 依赖于超越函数的其他科学代码 误差函数能够在一些代码中起到很重要的作用.,24,库内容,矢量统计学库(VSL) 随机数发生器组(RNGs) 大量的非均匀分布 V

11、SL广泛地使用在各种变换上 并行计算的支持 一些函数 用户能够提供自己的BRNG或变换 5个基本的RNGs (BRNGs) 位,整数,浮点数 MCG31, R250, MRG32, MCG59, WH,25,库内容,非均匀RNGs Gaussian (two methods) 高斯 Exponential 指数 Laplace 拉普拉斯变换 Weibull 韦伯分布 Cauchy 柯西分布 Rayleigh 瑞利 Lognormal 对数正态 Gumbel Gumbel分布,26,库内容,使用VSL 基本是三个步骤 创建一个流指针 VSLStreamStatePtr stream; 创建一个流

12、. vslNewStream(,27,库内容,实验: 用蒙特卡罗法计算 根据圆面积公式,S=r2 看一个单位圆,其中,1/4个 单位圆的面积是单位矩形面积 的一部分,单位矩形面积为1, 现在在单位矩形内产生大量 随机的点,则落在1/4圆内的 点所占的百分比就是1/4的单位 圆面积。 一个点是否在1/4单位圆内的判断方法就是该点的坐标是否满足 x2+y21,1,1,-1,-1,0,28,库内容,实验: 用蒙特卡罗法计算,1,1,-1,-1,0,int main()unsigned int iter=200000000; int i,j;double x, y;double dUnderCurve

13、=0.0;double pi=0.0;srand( 0);for (i=0;iiter;i+) x=(double)rand()/(double)RAND_MAX; y=(double)rand()/(double)RAND_MAX;if (x*x + y*y = 1.0) dUnderCurve+; pi = dUnderCurve / (double) iter * 4 ; return 0; ,29,库内容,实验: 用蒙特卡罗法计算,1,1,-1,-1,0,unsigned int iter=200000000; int i,j;double x, y;double dUnderCurve=0.0;double pi=0.0;double rBLOCK_SIZE*2; VSLStreamStatePtr stream;vslNewStream( ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报