矢量统计库英特尔® 数学核心函数库(英特尔® MKL)包含了众多扩展的统计功能,我们将这些功能集中到了一个称为矢量统计库(VSL)的子库中。目前,英特尔® MKL 矢量统计库包括卷积/关联以及庞大的随机数生成器集合。
卷积/关联VSL 提供了一组例程,旨在执行单精度数据和双精确度数据的线性卷积变换和线性关联转换。我们提供了:
- 傅立叶算法和直接算法
- 一维或多维
- 单精度和双精度
- C 和 Fortran 接口
- 当前易于使用的面向“任务”的 API
- 面向 ESSL 用户的 IBM ESSL* 接口
有关英特尔® MKL 矢量统计库中卷积和关联例程的详细信息,请参阅
英特尔® MKL 参考手册 
。
随机数英特尔® MKL 矢量统计库(VSL)是用于许多概率分布的随机数生成器的集合。所有 VSL 函数都经过高度优化,能够在英特尔® 架构上提供出色性能。
可以通过 VSL 显著提高性能的应用包括常用于物理、化学、医学模拟和财务分析软件中的多种模拟算法。该库为所有 VSL 函数提供 Fortran 接口和 C 接口。
VSL 提供了 9 个基本随机数生成器,它们在速度和统计质量上都有所不同,如下所示。
基本随机数生成器(BRNG) |
伪随机 |
| MCG59 | 乘同余法生成器 59 位 |
| MCG31m1 | 乘同余法生成器 31 位 |
| MRG32k3a | 复合递回生成器 32 位 |
| R250 | 通用反馈移位寄存器 |
| Wichman-Hill | 273 个基本生成器 |
| MT19937 | Mersenne Twister |
| MT2203 | 1024 个 Mersenne Twister 基本生成器 |
准随机 |
| Sobol | 基于 Gray 代码的 32 位生成器
|
| Niederreiter | 基于 Gray 代码的 32 位生成器
|
VSL 支持多种创建随机流的方法,包括蛙跳方法和块分割方法。对于大型 Monte Carlo 模拟,VSL 提供了例程,用于将随机数据流存储到文件,或从文件还原数据流。抽象流为使用分布生成器处理缓冲区中存储的随机数据提供了更大的灵活性。
VSL 还支持用户设计的基本生成器以及众多连续或离散分布生成器。
分布生成器类型 |
连续 | 离散 |
| 均匀分布 | 均匀分布 |
| 高斯分布 | 均匀位分布 |
| 高斯 MV 分布 | 贝努里分布 |
| 指数分布 | 几何分布 |
| 拉普拉斯分布 | 二项式分布 |
| 威布尔分布 | 超几何分布 |
| 柯西分布 | 泊松分布 |
| 瑞利分布 | 泊松分布(含变均值) |
| 对数正态分布 | 负二项式分布 |
| 康拜尔分布 | |
| Gamma 分布 | |
| Beta 分布 | |
VSL 函数使用单精度和双精度实数矢量参数,可以提供比标量实现更强大的性能优势。此处提供的表格中包含关于英特尔® 处理器上所有 VSL 随机数生成器与分布的完整性能信息。
为展示英特尔® 数学核心函数库的优化性能,我们将标准 C rand() 函数与英特尔® MKL 矢量均匀随机数生成器进行比较。英特尔® MKL VSL 函数是线程安全的,因此,我们还展示了英特尔® MKL 矢量均匀随机数生成器经过 OpenMP* 并行处理后的速度。
基于英特尔® 至强® 处理器的系统上的 VSL 与 C 代码的性能比较§
英特尔® 至强® 处理器1 | 运行时间(秒) | 与 rand() 相比的加速(倍数) |
| 标准 C rand() 函数 | 40.52 | 1.00 |
| 英特尔® MKL VSL 随机数生成器 | 6.88 | 5.89 |
| OpenMP* 版本(8 条线程) | 0.92 | 44.04 |
Visual Numerics Inc. 和 Numerical Algorithms Group Ltd. 是常用数值库与统计库的提供商。Visual Numerics 面向 Fortran 和 C/C++ 用户提供数学和统计分析子例程的集合,分别称为 IMSL Fortran 90 MP Library (F90MP*) 和 IMSL C Numerical Library*。Numerical Algorithms Group 为 C/C++ 和 Fortran 用户提供数值库,称为 NAG Fortran 77 Library*、NAG Fortran 90 Library*、NAG C Library*、NAG SMP Library* 和 NAG Parallel Library*。
下表提供了英特尔® MKL 10.0、IMSL F90MP 6.0 和 NAG Fortran 77(Mark 21)库中现有的随机数生成功能的摘要信息。
英特尔® 数学核心函数库(英特尔® MKL)10.0 与 IMSL* 和 NAG* 的特性比较
特性 | 英特尔® MKL | IMSL | NAG |
| BRNG | | | |
| 用户设计的 BRNG | | - 用户设计的 BRNG 取代了库 BRNG;多数库服务不支持用户设计的 BRNG
| |
| 序列处理 | - 创建、复制和删除流的机制
- 将数据流保存到文件/从文件还原数据流
- 基于一个或多个 BRNG 的任意随机数据流
| - 用于在 BRNG 之间进行切换的服务子例程
- 用于保存和还原 BRNG 种子的子例程
- 用于保存和还原 GFSR 和 shuffled BRNG 状态表的子例程
| - 用于保存和还原 BRNG 种子的子例程
- 用于在 BRNG 之间进行切换的服务子例程
|
| 子序列分割 | - 支持“前跳”和“蛙跳”两种方法
- “前跳”方法允许跳过一个序列中的任意多个元素
- “蛙跳”方法允许分割为任意多个非交叠子序列
| - 受限前跳方法支持(仅跳过序列中的 100,000 个元素)
| |
| 分布生成器和其他 BRNG 相关功能 | - 20 个单变量
- 1 个多变量
- 以方法 ID 为参数进行传递,从而支持多种转换方法
| - 24 个单变量
- 3 个多变量
- 一般离散、连续单变量生成器及基于数据的多变量生成器
- 随机正交矩阵和相关矩阵、双向表、顺序统计、抽样与排列、随机过程
- 通过各个子例程提供的多种转换方法
- ORNG 仅适用于均匀分布
| - 24 个单变量
- 2 个多变量
- 通用单变量分布生成器
- 随机抽样、排列、时间系列模型、正交矩阵和相关矩阵、随机表
- 多种转换方法不可用
- ORNG 适用于均匀分布、高斯分布和对数正态分布
|
| 矢量/标量接口 | 仅有矢量接口 | 某些分布生成器具有矢量和标量形式;其他生成器则仅为矢量形式或标量形式 | 某些分布生成器具有矢量和标量形式;其他生成器则仅为矢量形式或标量形式 |
| 编程语言界面 | 在一个程序包中提供 C 界面和 Fortran 界面 | 在不同程序包中分别提供 Fortran、C 和 Java* 界面 | 在不同程序包中分别提供 C 界面和 Fortran 界面 |
| 支持的硬件 | - 仅适用于英特尔® 架构
- 已针对目标架构进行了高度优化
| 多种平台(例如英特尔、Cray、HP、IBM 和 Sun) | 多种平台(例如 Apple、Cray、HP、IBM 和 Sun) |
1Mark 20 之后的库均支持两种用于生成正态分布随机数的方法。
下表显示了具有随机数生成功能的三种不同的库在基于英特尔® 至强® 处理器的系统上的数值和性能结果,这三种库分别为:英特尔® MKL 10.0、IMSL F90MP 6.0 和 NAG SMP Fortran 77 库(Mark 21)。加速是针对最低版本测评的。
性能比较: Black-Scholes 期权定价模型1,§
库 | 基本生成器 | 期权价值(准确价值) | 绝对错误
(标准错误) | 时间(秒) | 加速(倍数) |
调用 | 放置 | 调用 | 放置 |
| 英特尔® MKL | MCG31m1 | 16.7306
(16.7341) | 7.2177
(7.2179) | 0.0036
(0.0019) | 0.0002
(0.0009) | 4.671 | 8.78 |
MCG59 | 16.7364
(16.7341) | 7.2162
(7.2179) | 0.0023
(0.0019) | 0.0017
(0.0009) | 4.86 | 8.44 |
MT19937 | 16.7349
(16.7341) | 7.2164
(7.2179) | 0.0007
(0.0019) | 0.0015
(0.0009) | 5.078 | 8.08 |
| NAG | 原始 | 16.7339
(16.7341) | 7.2182
(7.2179) | 0.0002
(0.0019) | 0.0003
(0.0009) | 11.45 | 3.58 |
| IMSL | MT19937 | 16.7324
(16.7341) | 7.2178
(7.2179) | 0.0017
(0.0019) | 0.0001
(0.0009) | 35.703 | 1.15 |
最低标准 | 16.7343
(16.7341) | 7.217
(7.2179) | 0.0001
(0.0019) | 0.0009
(0.0009) | 41.031 | 1.00 |
我们使用“最低标准”和 IMSL 库中的 32 位 MT19937 基本生成器。我们使用了 NAG 库中的“原始”基本生成器。对于英特尔® MKL 10.0,我们共使用了 3 种基本生成器: MCG31m1、MT19937 和 MCG59。MCG59 同属于 NAG 库中的“原始”基本生成器,而 MCG31m1 的属性则类似于 IMSL 的“最低标准”基本生成器。
有关这一性能测试的详细信息,请参考 Sergey A. Maidanov 和 Andrey Naraikin 撰写的白皮书
使 Monte Carlo 方法更加简单快捷 
。
英特尔® 数学核心函数库的矢量统计库包含卷积/关联和一整套随机数字生成器,它们都针对英特尔® 架构进行了高度优化,与其它解决方案相比,可帮助您极大地改善应用性能。
§性能测试和等级评定均使用特定的计算机系统和/或组件进行测量,反映了使用这些测试所测的英特尔产品的大致性能。系统设计或配置的任何不同均能影响实际性能。购买者应进行多方咨询,以评估他们考虑购买的系统或组件的性能。如欲了解更多关于英特尔产品性能和性能测试的信息,请访问
http://www.intel.com/cd/software/products/apac/zho/index.htm。