英特尔® 数学核心函数库(英特尔® MKL)提供 ScaLAPACK(可扩展线性代数程序包)的基础组件,包括分布式内存版的 BLAS(PBLAS 或并行 BLAS),以及一组用于处理器间通信的线性代数通信子程序(BLACS)。
ScaLAPACK 是用于在分布式内存多处理器计算机(集群)上解算线性代数问题的标准例程程序包。ScaLAPACK 库是线性代数程序包(LAPACK)函数的一个子集,可在分布式内存多处理器环境中高效工作。
图 1 说明了 ScaLAPACK 及其组件之间的关系:
图 1: ScaLAPACK 和组件的关系
英特尔® MKL 中对 ScaLAPACK 库的实现特别针对基于英特尔® 安腾®、英特尔® 至强® 和英特尔® 奔腾® 处理器的系统进行了优化。 ScaLAPACK 涉及线性代数的两个领域 —— 直接解算器和特征值问题。因此,我们将同时探讨 PDGETRF(用于解算线性方程组的直接解算器)和 PDSYEV(用于解决特征值问题)。PDGETRF(并行、双精度、GEneral、三角形矩阵因数分解)是线性方程解算器领域的一个关键函数,这是因为 PDGETRF 是适用于很多矩阵类型的常用因数分解例程,并且它所完成的下上(LU)因数分解是线性方程解算器中对性能要求较高的部分。 在我们的测试中,我们将英特尔® MKL 的 ScaLAPACK 实现与 NETLIB 提供的公开实现进行比较。我们分别显示了使用英特尔® MKL 的 BLAS 和使用 ATLAS* 的 BLAS 实现的 Netlib ScaLAPACK 性能。如欲了解有关 ScaLAPACK 库的更多信息,请访问 http://www.netlib.org/scalapack/。*  原始性能
图 2 显示了在存在不同问题和具有不同内存大小的情况下,采用 64 枚英特尔® 至强® 处理器的 32 节点集群上的性能。图 2 说明:
1. 英特尔® MKL ScaLAPACK 性能大大超过 NETLIB ScaLAPACK。
2. 与使用 ATLAS* BLAS 的 NETLIB ScaLAPACK 相比,英特尔® MKL 的性能更加突出。  点击放大
图 2: 问题规模不同时的 PDGETRF 性能比较
由于 NETLIB ScaLAPACK 要求用户链接 BLAS 实现,所以可以隔离并标识出英特尔® MKL 因 ScaLAPACK 优化而获得的性能提高(相对 BLAS 优化而言)。英特尔® MKL 与 NETLIB(二者都使用英特尔® MKL BLAS)的比较显示,相对 NETLIB ScaLAPACK 而言,英特尔专为 ScaLAPACK 进行的优化实现了 15% 的性能提升。与使用 ATLAS* BLAS 的 NETLIB ScaLAPACK 相比,同时对英特尔® MKL ScaLAPACK 和 BLAS 进行优化可使性能总体提高约 50%。 在下面图 3 中,我们来看看用于计算实对称矩阵的特征值和特征向量的 PDSYEV。同样是采用英特尔® 至强® 处理器的 32 节点(64 内核)集群,我们可以看到英特尔® MKL 提供的性能却是 NETLIB ScaLAPACK 的两倍。  点击放大
图 3: 问题规模不同时的 PDSYEV 性能比较
分布式内存并行计算(集群)的主要优势在于,能够实现大型计算的并行计算规模。因此,集群用户通常会对软件根据系统规模调整性能这一特点产生浓厚兴趣。传统测试是随节点数量增加而按比例增加问题规模,并观察性能线性增加的幅度。图 4 对此进行了展示,同时表明,英特尔® MKL 性能较在大型系统上使用 ATLAS BLAS 的 NETLIB 有很大提高。  点击放大
图 4: 集群大小不同时的性能比较
块大小对性能的影响
运行 ScaLAPACK 时,您必须决定如何对数据“分块”。决定如何在节点间分布数据的过程中包括选择适当的块大小。块大小决定每个节点上分配的数据量。这就需要努力,选择错误的块大小可能会对性能产生极大的负面影响。 英特尔® MKL 的 ScaLAPACK 实现能够容忍块大小差异。如下图 5 所示,无论块大小如何设置,英特尔® MKL 9.0 均可提供大致相同的高性能。而 NETLIB ScaLAPACK 则无法保证这一点。  点击放大
图 5: 块大小不同时的性能比较 |
§性能测试和等级评定均使用特定的计算机系统和/或组件进行测量,反映了使用这些测试做测的英特尔产品的大致性能。系统设计或配置的任何不同均能影响实际性能。购买者应进行多方咨询,以评估他们考虑购买的系统或组件的性能。如欲了解更多关于英特尔产品性能和性能测试的信息,请访问
http://www.intel.com/cd/software/products/apac/zho/index.htm。