辩论赛一辩是干什么的:英特尔(R) 数学内核库 9.0 Linux* 版入门

来源:百度文库 编辑:中财网 时间:2024/05/13 07:50:11
特尔® 数学内核库 9.0 Linux* 版入门指南

文档编号:310704-003US

目录

概述
开始之前
   简明目录结构
   详细目录结构
配置“英特尔® 数学内核库”(英特尔® MKL)
使用“英特尔 MKL”链接应用程序
线程化
免责声明与法律信息

 

概述

本指南介绍安装产品之后需要执行的步骤,并提供一个简单的用法情形,旨在帮助读者开始使用“英特尔® 数学内核库(英特尔® MKL)Linux* 版”。操作程序引导您完成如何将应用程序链接到库、如何配置内核库,以及其它一些基本步骤。

假设您是在机器上完成“英特尔 MKL”的安装之后使用本文档。

如果尚未安装产品,请使用“英特尔 MKL 安装指南”(文件 Install.txt)获取协助。

 

开始之前

完成“英特尔 MKL”的安装之后,执行一些基本的验证任务来确认内核库的安装与配置是否正确,这点非常有用。

  1. 检查是否已经创建所选的安装目录。默认安装目录是 /opt/intel/mkl/9.0
  2. 如果选择在机器上保留安装多个版本,请更新构建脚本,使它们指向所需版本的“英特尔 MKL”。
  3. 检查 tools/environment 目录中是否放有以下三个文件:
    mklvars32.sh
    mklvarsem64t.sh
    mklvars64.sh

    您可以使用这些文件在当前用户外壳中设置环境变量 INCLUDELD_LIBRARY_PATH

 

简明目录结构

下面显示“英特尔 MKL”安装之后的简明结构。

mkl/9.0 主目录 mkl/9.0/doc 文档目录   mklEULA.txt “英特尔 MKL”许可证   Doc_Index.htm “英特尔 MKL”文档的索引   fftw2xmkl_notes.htm FFTW 2.x 接口支持用户技术说明   fftw3xmkl_notes.htm FFTW 3.x 接口支持用户技术说明   fft2dfti.pdf “英特尔 MKL”的 FFT 到 DFTI 封装器用户技术说明   Getting_Started.htm 英特尔 MKL 入门(本文)   Install.txt 安装指南   mklman.pdf 英特尔 MKL 参考手册   mklman80_j.pdf 日文版的“英特尔 MKL 参考手册”   mklqref/index.htm MKL 快速参考   mklsupport.txt 有关软件包编号的信息,供需要客户技术支持时引用   mkluse.htm 英特尔 MKL 用户技术说明   Readme.txt 初始用户信息   redist.txt 可再发行的文件的列表   Release_Notes.htm 发行说明   Release_Notes.txt 发行说明(文本格式)   userguide.pdf 用户指南   vmlnotes.htm VML 的一般讨论   vslnotes.pdf VSL 的一般讨论 mkl/9.0/man/man3 “英特尔 MKL”的 BLAS、稀疏矩阵 BLAS 以及 LAPACK(不含辅助)函数的手册页 mkl/9.0/examples 示例的源代码与数据 mkl/9.0/include 包含内核库例程以及测试与示例程序的 INCLUDE 文件 mkl/9.0/interfaces/blas95 包含 BLAS 的 f95 封装器以及用于构建内核库的 makefile mkl/9.0/interfaces/lapack95 包含 LAPACK 的 f95 封装器以及用于构建内核库的 makefile mkl/9.0/interfaces/fftw2xc 包含 FFTW 2.x 版(C 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/interfaces/fftw2xf 包含 FFTW 2.x 版(Fortran 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/interfaces/fftw3xc 包含 FFTW 3.x 版(C 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/interfaces/fftw3xf 包含 FFTW 3.x 版(Fortran 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/interfaces/fftc 包含 FFT(C 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/interfaces/fftf 包含 FFT(Fortran 接口)的封装器,用于调用“英特尔 MKL”的 DFTI mkl/9.0/tests 测试的源代码与数据 mkl/9.0/lib/32 包含针对 IA-32 应用程序的静态库与共享对象 mkl/9.0/lib/em64t 包含一些静态库与共享对象,针对含“英特尔® EM64T”的处理器上运行的应用程序 mkl/9.0/lib/64 包含一些静态库与共享对象,针对英特尔® 安腾® 2 处理器 mkl/9.0/tools/builder 包含用于创建自定义动态链接库的工具 mkl/9.0/tools/environment 包含用于在用户外壳中设置环境变量的外壳脚本 mkl/9.0/tools/support 包含用于将软件包标识与许可证密钥信息报告给“英特尔® 卓越支持”的实用程序 mkl/9.0/tools/plugins/com.intel.mkl.help 包含 Eclipse 插件及附带的 WebHelp 格式的“英特尔 MKL 参考手册”。如需了解有关注释,请参阅 Doc_Index.htm。

 

详细目录结构

“英特尔® MKL”分别有内核库的 IA-32、“英特尔® 扩展内存 64 位技术”(英特尔® EM64T)以及英特尔® 安腾® 2 处理器等版本:

  • IA-32 版位于 lib/32 目录。
  • “英特尔® EM64T”版位于 lib/em64t 目录。
  • 英特尔® 安腾® 2 处理器版位于 lib/64 目录。

“英特尔® MKL”由两个部分组成:

  • 高级库(ScaLAPACK、LAPACK、稀疏矩阵解算器)
  • 针对各种特定处理器的内核,分别在 libmkl_ia32.alibmkl_em64t.a 以及 libmkl_ipf.a 中。

高级别库在优化时不针对特定的处理器,因此可以在英特尔® 奔腾® 处理器、英特尔® 酷睿™2 至尊版处理器系列以及英特尔® 安腾 2 处理器等广泛的处理器上使用,并且效率很高。针对各种特定处理器的内核包含 BLAS、稀疏矩阵 BLAS、cblas、GMP、FFT、DFT/VSL、VML 以及区间算术例程,这些例程都针对每种特定的处理器进行过优化。

此外还按以下方式提供线程软件:

  • 单独的库 (libguide.a),在进行静态链接(不建议使用,因为静态链接分层软件的多个副本会导致性能问题,并且如果初始化多个副本,还可能会导致正确性问题)时使用
  • 动态链接库 (libguide.so),在动态链接(建议使用)到“英特尔® MKL”时使用。

以下信息显示内核库的详细目录结构:

lib/32 包含针对 32 位应用程序的所有库   libmkl_ia32.a 针对 32 位应用程序进行过优化的内核(BLAS、cblas、稀疏矩阵 BLAS、GMP、FFT、DFT、VML、VSL、区间算术)   libmkl_lapack.a LAPACK 例程与驱动程序   libmkl_solver.a 稀疏矩阵解算器例程   libguide.a 用于静态链接的线程库   libmkl.so 用于动态加载针对特定处理器的内核的内核库调度程序   libmkl_lapack32.so 单精度数据类型的 LAPACK 例程与驱动程序   libmkl_lapack64.so 双精度数据类型的 LAPACK 例程与驱动程序   libmkl_def.so 默认内核(英特尔® 奔腾®、奔腾® Pro 以及奔腾® II 处理器)   libmkl_p3.so 英特尔® 奔腾® III 处理器内核   libmkl_p4.so 奔腾® 4 处理器内核   libmkl_p4p.so 针对含“第三代数据流单指令多数据扩展指令集”(SSE3) 的英特尔® 奔腾® 4 处理器的内核   libmkl_p4m.so 针对基于英特尔® 酷睿™ 微体系结构的处理器的内核   libvml.so 用于动态加载针对特定处理器的 VML 内核的内核库调度程序   libmkl_vml_def.so 默认内核(奔腾®、奔腾® Pro、奔腾® II 处理器)的 VML 部分   libmkl_vml_p3.so 奔腾® III 处理器内核的 VML 部分   libmkl_vml_p4.so 奔腾® 4 处理器内核的 VML 部分   libmkl_vml_p4p.so 针对含“第三代数据流单指令多数据扩展指令集”(SSE3) 的奔腾® 4 处理器的 VML   libmkl_vml_p4m.so 针对基于英特尔® 酷睿™ 微体系结构的处理器的 VML   libmkl_ias.so 区间算术例程   libguide.so 用于动态链接的线程库     由于各个 makefile 操作,在 interfaces 文件夹中额外生成了大量的接口库。请参阅本节末尾的列表。       lib/em64t 包含针对“英特尔® EM64T”应用程序的所有内核库   libmkl_em64t.a 针对“英特尔® EM64T”进行过优化的内核   libmkl_lapack.a LAPACK 例程与驱动程序   libmkl_solver.a 稀疏矩阵解算器例程   libguide.a 用于静态链接的线程库   libmkl.so 用于动态加载针对特定处理器的内核的内核库调度程序   libmkl_lapack32.so 单精度数据类型的 LAPACK 例程与驱动程序   libmkl_lapack64.so 双精度数据类型的 LAPACK 例程与驱动程序   libmkl_def.so 默认内核   libmkl_p4n.so 针对含“英特尔® EM64T”的英特尔® 至强® 处理器的内核   libmkl_mc.so 针对基于英特尔® 酷睿™ 微体系结构的处理器的内核   libvml.so 用于动态加载针对特定处理器的 VML 内核的内核库调度程序   libmkl_vml_def.so 默认内核 VML 部分   libmkl_vml_p4n.so 针对含“英特尔® EM64T”的英特尔® 至强® 处理器的 VML   libmkl_vml_mc.so 针对基于英特尔® 酷睿™ 微体系结构的处理器的 VML   libmkl_ias.so 区间算术例程   libguide.so 用于动态链接的线程库     由于各个 makefile 操作,在 interfaces 文件夹中额外生成了大量的接口库。请参阅本节末尾的列表。       lib/64 包含针对基于安腾® 2 的应用程序的所有内核库   libmkl_ipf.a 针对英特尔® 安腾® 2 处理器的处理器内核   libmkl_lapack.a LAPACK 例程与驱动程序   libmkl_solver.a 稀疏矩阵解算器例程   libguide.a 用于静态链接的线程库   libmkl_lapack32.so 单精度数据类型的 LAPACK 例程与驱动程序   libmkl_lapack64.so 双精度数据类型的 LAPACK 例程与驱动程序   libguide.so 用于动态链接的线程库   libmkl.so 用于动态加载针对特定处理器的内核的内核库调度程序   libmkl_i2p.so 安腾® 2 处理器内核   libmkl_vml_i2p.so 安腾® 2 处理器 VML 内核   libmkl_ias.so 区间算术例程   libvml.so 用于动态加载针对特定处理器的 VML 内核的内核库调度程序

下面是由于各个 makefile 操作而在 interfaces 文件夹中额外生成的接口库与模块:

libmkl_blas95.a 包含 BLAS (BLAS95) 的 Fortran-95 封装器 libmkl_lapack95.a 包含 LAPACK (LAPACK95) 的 Fortran-95 封装器 libfftw2xc_gnu.a 包含 FFTW 2.x 版的接口(GNU 编译器的 C 接口),用于调用“英特尔 MKL”的 DFTI libfftw2xc_intel.a 包含 FFTW 2.x 版的接口(英特尔® 编译器的 C 接口),用于调用“英特尔 MKL”的 DFTI libfftw2xf_gnu.a 包含 FFTW 2.x 版的接口(GNU 编译器的 Fortran 接口),用于调用“英特尔 MKL”的 DFTI libfftw2xf_intel.a 包含 FFTW 2.x 版的接口(英特尔编译器的 Fortran 接口),用于调用“英特尔 MKL”的 DFTI libfftw3xc_gnu.a 包含 FFTW 3.x 版的接口(GNU 编译器的 C 接口),用于调用“英特尔 MKL”的 DFTI libfftw3xc_intel.a 包含 FFTW 3.x 版的接口(英特尔编译器的 C 接口),用于调用“英特尔 MKL”的 DFTI libfftw3xf_gnu.a 包含 FFTW 3.x 版的接口(GNU 编译器的 Fortran 接口),用于调用“英特尔 MKL”的 DFTI libfftw3xf_intel.a 包含 FFTW 3.x 版的接口(英特尔编译器的 Fortran 接口),用于调用“英特尔 MKL”的 DFTI mkl95_blas.mod 包含 BLAS (BLAS95) 的 Fortran-95 接口模块 mkl95_lapack.mod 包含 LAPACK (LAPACK95) 的 Fortran-95 接口模块 mkl95_precision.mod 包含 BLAS95 与 LAPACK95 的精度参数的 Fortran-95 定义

 

配置“英特尔 MKL”

安装完成之后,可以使用 tools/environment 目录中的 mklvars32.sh、mklvarsem64t.sh 以及 mklvars64.sh 文件在用户外壳中设置环境变量 INCLUDELD_LIBRARY_PATH

如果要进一步自定义“英特尔 MKL”的某些功能,可以使用配置文件 mkl.cfg,它包含多个可以更改的变量。如需有关使用配置文件的详细信息,请参阅英特尔® MKL 用户技术说明 文档。

 

使用“英特尔 MKL”链接应用程序

要使用“英特尔 MKL 库”进行链接,请遵循以下通用的形式:

<要链接的文件>
-L
[-lmkl_solver] [-lmkl_lapack95] [-lmkl_blas95]
{[-lmkl_lapack] -lmkl_{ia32, em64t, ipf},[-lmkl_lapack{32,64}] -lmkl, -lvml}
-lguide -lpthread

请注意,
libmkl_solver.a 包含稀疏矩阵解算器函数,
libmkl_lapack.alibmkl_lapack32.so 以及 lib_mkl_lapack64.so 包含 LAPACK 函数。
libmkl_ia32.alibmkl_em64t.a 以及 libmkl_ipf.a 分别包含针对 IA-32、“英特尔® EM64T”以及英特尔安腾处理器的 BLAS、稀疏矩阵 BLAS、GMP、FFT/DFT、VML、VSL 以及区间算术函数。
libmkl_lapack95.alibmkl_blas95.a 分别包含 LAPACK95 与 BLAS95 接口。它们没有包含在原始的发行包中,在使用这些接口之前,应该先构建它们(如需有关如何构建内核库的详细信息,请参阅本节之后的 LAPACK 与 BLAS 的 Fortran 95 接口与封装器使用说明)。

libmkl.so 文件包含这些对象(VML/VSL 除外,它们包含在 libvml.so 中)的动态加载版本。

在所有情况下,都会在运行时加载适当的库。下面是在 IA-32 系统上使用英特尔® 编译器进行链接的一些具体示例:

ifort myprog.f -L$MKLPATH-lmkl_lapack -lmkl_ia32 -lguide -lpthread
        静态链接用户代码 myprog.f、LAPACK 以及内核。处理器调度程序将在运行时针对系统调用适当的内核。
ifort myprog.f -L$MKLPATH-lmkl_lapack95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        静态链接用户代码 myprog.f、Fortran-95 LAPACK 接口以及内核。处理器调度程序将在运行时针对系统调用适当的内核。
ifort myprog.f -L$MKLPATH-lmkl_blas95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        静态链接用户代码 myprog.f、Fortran-95 BLAS 接口以及内核。处理器调度程序将在运行时针对系统调用适当的内核。
icc myprog.c -L$MKLPATH-lmkl_ia32 -lguide -lpthread -lm
        静态链接用户代码 myprog.c、BLAS、稀疏矩阵 BLAS、GMP、VML/VSL、区间算术以及 FFT/DFT。处理器调度程序将在运行时针对系统调用适当的内核。
ifort myprog.f -L$MKLPATH-lmkl_solver -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        静态链接用户代码 myprog.f、稀疏矩阵解算器,可能还有“英特尔 MKL”中的其它例程(包括支持稀疏矩阵解算器所需的内核)。
icc myprog.c -L$MKLPATH-lmkl -lguide -lpthread
        动态链接用户代码 myprog.c、“英特尔 MKL”中的 BLAS 或 FFT。

备注:如果静态(不建议使用)链接 libguide,并且

  • 使用英特尔编译器,请链接编译器附带的 libguide 版,也就是说,要使用 -openmp 选项。
  • 不使用英特尔编译器,则请链接“英特尔 MKL”附带的 libguide 版。

如果使用“英特尔 MKL”的动态链接 (libguide.so)(建议使用),请确保适当定义 LD_LIBRARY_PATH,以便在运行时正好只找到并使用此版本的 libguide

如需有关使用“英特尔 MKL”链接与运行应用程序的详细信息,请参阅英特尔® MKL 用户技术说明 文档 (mkluse.htm)。

如需获取链接示例,请访问“英特尔 MKL”技术支持网站 http://www.intel.com/support/performancetools/libraries/mkl/

 

LAPACK 与 BLAS 的 Fortran-95 接口与封装器使用说明

Fortran-95 接口针对纯过程提供,随带的封装器以源代码形式提供。使用它们的最简单的方法是构建相应的函数库,然后将它们当作用户库进行链接。要执行这些操作,用户应拥有管理员权限。假设以写入方式打开产品目录,则过程非常简单:转到相应的目录 mkl/9.0/interfaces/blas95mkl/9.0/interfaces/lapack95,然后输入相应的命令之一:

make PLAT=lnx32 lib       - 针对 IA-32
make PLAT=lnx32e lib     - 针对“英特尔® EM64T”
make PLAT=lnx64 lib       - 针对英特尔® 安腾® 2 处理器平台。

这样将构建所需的库与相应的 .mod 文件,并将它们安装在此版本的标准目录中。.mod 文件也可以从接口文件 ifort -c mkl_lapack.f90ifort -c mkl_blas.f90 中获取。这些文件位于 include 目录。
如果没有管理员权限,请执行以下操作:

  1. 将整个目录(mkl/9.0/interfaces/blas95mkl/9.0/interfaces/lapack95)复制到用户自定义的目录
  2. 将相应的文件(mkl_blas.f90mkl_lapack.f90)从 mkl/9.0/include 中分别复制到用户自定义的目录 /blas95/lapack95
  3. /blas95/lapack95 中使用一个额外的变量来运行以上命令之一,例如:
    make PLAT=lnx32 INTERFACE=mkl_blas.f90 lib
    make PLAT=lnx32 INTERFACE=mkl_lapack.f90 lib

现在将构建所需的库与 .mod 文件,并将它们分别安装在 /blas95/lapack95 目录中。

默认情况下假设使用 ifort 编译器。您可以通过使用额外的参数 make FC=<编译器> 来更改它,例如:
make PLAT=lnx64 FC=<编译器> lib

高级用户可以在不构建库的情况下使用接口。

要从构建目录中删除库,请使用以下命令:
make PLAT=lnx32 clean       - 针对 IA-32
make PLAT=lnx32e clean     - 针对“英特尔® EM64T”
make PLAT=lnx64 clean       - 针对英特尔® 安腾® 2 处理器平台。

 

线程化

“英特尔® MKL”的许多地方都经过线程化处理,并且使用 OpenMP* 线程软件。

OpenMP* 软件根据环境变量 OMP_NUM_THREADS 作出反应来设置要使用的线程数。线程数可以在程序运行于其中的外壳中设置。

如果未设置变量 OMP_NUM_THREADS,则“英特尔® MKL”软件会在 1 个线程上运行(稀疏矩阵解算器除外,它的默认线程数是系统中的处理器数)。建议始终将 OMP_NUM_THREADS 设置为要在应用程序中使用的处理器数。

请注意,对于一维 FFT 中等于 2 的幂次的数据,“英特尔 MKL”仅提供针对英特尔® 安腾处理器的并行功能。

要更改线程数,请输入:

export OMP_NUM_THREADS=<要使用的线程数>

这是在程序将运行于其中的命令外壳中输入的。


如需有关“英特尔 MKL”的详细技术信息,请参阅英特尔® MKL 用户技术说明 (mkluse.htm) 文档。


 

免责声明与法律信息

本文所含信息专门针对英特尔(R) 产品提供。本文并未授予任何知识产权的许可证,无论是明确、暗示、禁止反言还是其它任何形式。除这些产品的“英特尔销售条款”之规定外,英特尔概不承担任何其它义务,对于英特尔产品的销售与/或使用(包括适合特定用途、适销性或不侵犯任何专利权、版权或其它知识产权),英特尔不作任何明确或暗示的担保,也不承担任何赔偿责任。英特尔产品无意用于医疗、救生、维持生命、危机控制、安全系统或核设施等用途。
英特尔随时可能更改技术规格与产品说明,如确有更改,恕不另行通知。

本文所述软件可能包含一些软件缺陷,导致产品与发布的规格不符。目前已确定的软件缺陷可应客户要求提供。

本文及其所述软件均以许可证为前提而提供,只能依据许可证的各项条款进行使用或复制。本手册中的信息仅供参考之用,可随时更改而不另行通知,亦不得视为英特尔公司所作的任何承诺。对于本文或提供的与本文有关的任何软件中可能出现的任何错误或不准确之处,英特尔公司概不承担任何责任或义务。

除此类许可证允许的内容之外,未经英特尔公司书面明确同意,对于本文的任何部分,均不得以任何形式或通过任何手段进行复制或传输,亦不得将其存储到检索系统中。

标有“保留”或“未定义”字样的任何功能或指令,其存在性与特性均不确定,开发人员切勿对此有所依赖。开发人员的软件代码如果不恰当地使用了保留的或未定义的功能或指令,在英特尔处理器上运行时,可能会导致无法预知的行为或故障。英特尔保留这些功能或指令供将来定义之用,对于因按照未授权的方式使用它们而引起的任何冲突或不兼容现象,英特尔概不承担任何责任。

BunnyPeople、赛扬、Celeron Inside、迅驰、迅驰徽标、Chips、Core Inside、Dialogic、EtherExpress、ETOX、FlashFile、i386、i486、i960、iCOMP、InstantIP、英特尔、英特尔徽标、Intel386、Intel486、Intel740、IntelDX2、IntelDX4、IntelSX2、英特尔酷睿、Intel Inside、Intel Inside 徽标、Intel. Leap ahead.、Intel. Leap ahead. 徽标、英特尔 NetBurst、英特尔 NetMerge、英特尔 NetStructure、英特尔 SingleDriver、英特尔 SpeedStep、英特尔 StrataFlash、英特尔欢跃、英特尔 XScale、IPLink、安腾、Itanium Inside、MCS、MMX、MMX 徽标、Optimizer 徽标、OverDrive、Paragon、PDCharm、奔腾、奔腾 II 至强、奔腾 III 至强、Performance at Your Command、Pentium Inside、skoool、Sound Mark、The Computer Inside.、The Journey Inside、VTune、至强、Xeon Inside 以及 Xircom 是英特尔公司或其子公司在美国以及其它国家或地区的商标或注册商标。

* 其它品名与品牌可能是属于其它公司的资产。

© 2005-2006 英特尔公司版权所有。