英特尔® 英特尔多核计算技术专区
图像
高性能函数库MKL/IPP
图像 图像
Intel MKL 与一些其他的数学函数库

Intel MKL 性能数据 一个简单的使用 MKL 的例子
Intel 高性能库之 IPP 篇

Intel IPP 的性能 英特尔 IPP 的链接方式
    打印打印
图像 图像

图像 Intel MKL 与一些其他的数学函数库 图像

Intel MKL 提供了优化的数学计算函数,下面的是MKL的函数的接口与它函数库的比较:

BLAS 与 LAPACK 函数接口

BLAS 与LAPACK 函数是求解线性代数问题的标准函数库。NETLIB(http://www.netlib.org)提供了一个开源的实现。Intel MKL函数与NETLIB 的BLAS 与LAPACK函数的接口相兼容,同时,MKL对函数的实现进行了高度的优化。
用户的程序从NETLIB的函数转换到MKL函数的时候,只需在链接的时候,替换相应的Intel MKL 函数库,不需要修改源代码。MKL提供的线性代数库函数包括:
BLAS: BLAS Level 1, BLAS Level 2, BLAS Level 3, Sparse BLAS
LAPACK: 与Netlib 的新LAPACK 3.1 函数接口兼容
ScaLAPACK:与Netlib Scalapack 接口兼容。

MKL 函数与FFTW
FFTW 是由MIT开发的,广泛使用的傅立叶变换函数库。Intel MKL提供与FFTW 2.x and 3.x 相兼容的wrapper函数。 通过这个wrapper函数, FFTW的用户可以用MKL FFT 函数替代原有程序的FFT变换。
MKL提供的wrapper函数为C的源代码,代码位于MKL \examples\fftw2xc目录下。 这些wrapper 函数将FFTW的接口转换为Intel MKL的DFTI傅立叶函数调用。 这样,基于FFTW接口的程序,不再需要修改源代码,就能够使用MKL的DFT变换函数。
需要说明的是,由于FFTW的与MKL 的DFTI的函数功能不完全相同,用户在使用MKL的Wrapper函数去替代FFTW的时候,会有一些具体的限制, 大家可以参见下面的文章: http://www.intel.com/software/products/mkl/docs/fftw_mkl_user_notes_2.htm



图像 Intel 高性能库之 IPP 篇 图像

英特尔(R)集成性能基元(英特尔(R)IPP)是一款多核就绪的扩展函数库,其中包含众多针对多媒体、数据处理和通信应用高度优化的软件函数。它包括:

视频编码:用于 DV25/50/100、MPEG-2、MPEG-4、H.263 和 MPEG-4 Part 10 (H.264) 编解码器的关键算法组件。
图像和 2D 信号处理:包含多种可针对图像和图像内区域 (ROI) 执行的算法。
计算机视觉:针对多种主要计算机视觉运算进行优化的函数,可用于安全、计算机控制、媒体管理、媒体注释等领域的应用程序。
颜色转换:如今随着多种格式的数字媒体的蓬勃发展,在不同的色彩形式间转换的需求也随之产生。
字符串处理:使用英特尔 IPP 优化的字符串操作,将优化的文本数据库管理、搜索与检索或文档索引处理功能集成到应用程序中。
JPEG 编码:用于 JPEG、JPEG 2000 和运动 JPEG 编解码器的重要算法组件。
语音编码:支持以下语音编解码器/函数的例程:、G.729、AMR-宽带、GSM 全速率和压缩扩展,回声消除等。
信号处理:过滤和卷积、数组/信号初始化/处理、变换、分屏/采样、数组算术/逻辑运算和数组/信号统计。
数据压缩:除了使用编解码器进行的视频、音频和图像压缩之外,还提供了无损压缩法函数。
音频编码:用于 MP3 和 ACC 编解码器的重要算法组件
语音识别:集成高级语音识别、IP 语音和语音注解功能
矢量/矩阵运算:提供了丰富的矩阵和矢量运算,其中包括物理建模和 3D 转换/光照计算
密码技术:快速建立强大的,高性能的加密模块和应用。
射线跟踪与渲染:在射线跟踪、逼真图像渲染以及物理应用中使用的核心运算



图像 Intel MKL 性能数据 图像

下面,我们提供一些常用的Intel MKL 函数的性能数据:

1)通用矩阵计算(DGEMM )是一个广为使用的数学函数。 下图给出了Intel MKL 8.0 与ATLAS*的矩阵计算函数的性能数据。ATLAS* (Automatically Tuned Linear Algebra Software) 是比较流行的线性代数的计算函数库。它实现了绝大多数的BLAS 与LAPACK 的函数。ATLAS 的网站是: http://math-atlas.sourceforge.net/.*
Intel MKL 实现了多线程的优化。 在双核和多核处理器上,它能够为DGEMM函数带来2-5倍的性能提升。下图中,我们能够发现: 1)相比于ATLAS 函数库, Intel MKL 能够有明显性能提 2)Intel MKL BLAS 函数提供性能优越的多线程的支持

2) ScaLAPACK 是集群上求解线性方程的标准程序包。它是线性代数程序包(LAPACK)函数的一个子集。下图显示了对于不同问题与不同内存大小,在64 位英特尔至强处理器的 32 节点集群上, Intel MKL的性能. 图中数据表明:1)Intel MKL ScaLAPACK 性能明显超过 NETLIB ScaLAPACK。 2). 与使用 ATLAS* BLAS 与 NETLIB ScaLAPACK 代码相比,英特尔 MKL 的性能更为突出。

3). Intel MKL傅立叶变换函数已针对中等和大型问题进行高度优化。下面的图表将Intel MKL 的性能与广为使用的FFT计算函数FFTW的性能进行了比较。该图表主表明:1)Intel MKL提供优异的傅立叶变换的性能。2) 英特尔® MKL 为多处理器系统提供出色的可伸缩性。 3)在中等和大型转换方面,英特尔® MKL 比 FFTW 更出色。
1 维转换

2 维转换

 


图像 Intel IPP 的性能 图像

英特尔®集成性能函数库(英特尔® IPP )提供在英特尔®平台上优化的函数,开发人员可以直接应用这些函数,从而获得高的应用性能。下面是一些性能数据:

英特尔® IPP 5.3针对新sse4功能也进行了性能优化,用以提高对新一代45纳米制程的Intel ® Core ™ 2处理器家族的支持。
具体图片在:http://topic.csdn.net/u/20080331/15/2dbb7f6f-7141-40f5-995f-2fe31ace6254.html。

 



图像 一个简单的使用 MKL 的例子 图像

下面是一个使用Intel MKL 进行矩阵计算的例子. 通过的这个例子,我们可以了解如何使用Intel MKL 的函数库:

1>程序说明:下面的matrix.c 文件分别调用 C 代码,Intel MKL BLAS Level 1 函数 (ddot), BLAS Level 2 函数(dgemv) 与 BLAS Level 3的函数(DGEMM)完成矩阵计算: roll_your_own_multiply 是 C 源代码,它直接依赖编译器生成优化代码。Ddot_Multiply,Dgemv_multiply使用Intel MKL 函数实现部分矩阵运算。Dgemm_multiply 直接调用MKL 的矩阵计算函数。

2>程序编译与链接:


下面是在Linux 32 的系统上,使用Intel Compiler编译该程序并链接Intel MKL 10.0的例子:
> source /opt/intel/cc/10.x.xxx/bin/iccvars.sh #设置Intel Compiler 环境变量
> icl –o matrix –I/opt/intel/mkl/10.0.xxxxx/include/ matrix.c-L/opt/intel/mkl/10.0.xxxx/lib/32/ -lmkl_intel_c -lmkl_intel_thread -lmkl_core -lguide40.lib –lpthread

其他的链接的方式,大家可以查看下面的帖子:http://support.intel.com/support/performancetools/sb/CS-028699.htm

3> 程序执行:
> source /opt/intel/mkl/10.0.xxxxx/tools/environment/mklvars32.sh #程序使用动态方式链接MKL函数时,设置MKL的环境变量。
>./matrix

4> 设置多线程运行:在Intel MKL 10.0 使用OpenMP* 实现多线程。 OpenMP*程序可以通过环境变量 OMP_NUM_THREADS 去控制线程的数目。
> export OMP_NUM_THRADS=4 #设置程序的线程为 4
> ./matrix #DGEMM在执行的时候使用4个线程。

注意:在MKL 10.0 中, 如果OMP_NUM_THREADS没有定义,MKL函数可能会根据数据的大小,以及其他的变量来设置线程数目, 缺省时,可能运行多个线程运行。




图像 英特尔 IPP 的链接方式 图像

英特尔IPP的链接方式

英特尔IPP由三种函数库组成
Dynamic包括对各种处理器的优化代码动态库,如ipps.lib,ippst7.dllg
Static Emerged 包括对各种处理器的优化代码静态库,如ippsemerged.lib
Static Merged 包括对指定处理器的优化代码静态库

对于不同的需求,这些函数库提供以下四种链接模式,
动态链接(Dynamic linkage),简便易用,但可执行文件和库文件总量大。
定制的动态链接(Custom dynamic linkage),抽取指定函数的优化代码组成新动态库,减少可执行文件和库文件大小。
支持单种处理器的静态链接(Single processor static linkage),可执行文件最小,只含适用于指定处理器的优化代码。
支持多种处理器的静态链接(Static linkage with dispatching),可执行文件较小,只含适用于所有处理器的优化代码。