技术文章和新闻稿

并行MATLAB:多个处理器和多个核心

由克莱尔,Mathworks


并行MATLAB:多个处理器和多个核心

十二年前,1995年春天,我写了一个标题的克利夫角“为什么没有平行的matlab。”一本一页的文章已成为我最常引用的论文之一。当时,我认为大多数当代平行计算机的分布式内存模型与之不兼容马铃薯内存模型,Matlab仅在可能会自动并行化的任务上仅花费了一小部分执行时间,并且没有足够的潜在客户来证明重要的发展工作。

今天情况非常不同。首先,Matlab已经从一个简单的“矩阵实验室”进化到了一个成熟的技术计算环境,支持大规模项目涉及多数数量线性代数。金宝app其次,今天的微处理器有两种或四个计算核心(我们可以在未来预期更多),现代计算机具有复杂的等级存储器结构。第三,大多数Matlab用户现在可以访问机器的集群和网络,很快就会有个人并行计算机。

由于所有这些变化,我们现在都有平行Matlab.

Matlab支金宝app持三种并行性:多线程,分布式计算和明确的并行性。这些不同类型可以共存 - 例如,分布式计算作业可能会在每台计算机上调用多线程功能,然后使用分布式阵列收集最终结果。对于多线程并行性,可以在MATLAB首选项面板中设置线程数。我们使用Intel Math Kernel库,其中包括BLA的多线程版本(基本线性代数子程序)。对于矢量参数,Matlab基本函数库包括指数和三角函数,是多线程的。

选择要使用的平行形式可能是复杂的。这个Cleve的角落描述了一些与多线程和分布式并行性相结合的实验。

三种类型的并行计算


多线程并行性。在多线程并行性中,MATLAB的一个实例自动生成多个同时指令流。多个处理器或核心,共享单个计算机的内存,执行这些流。一个例子是求解矩阵的元素。

分布式计算在分布式计算中,MATLAB的多个实例在单独的计算机上运行多个独立计算,每个计算机都有自己的内存。几年前,我称之为这个非常普遍而重要的一件并行性“令人尴尬的平行”,因为不需要新的计算机科学。在大多数情况下,单个程序以不同的参数或不同的随机数种子运行多次。

明确的并行性。在显式并行性中,Matlab的几个实例在多个处理器或计算机上运行,​​通常具有单独的存储器,并同时执行单个MATLAB命令或M函数。新的编程构造,包括并行环和分布式阵列,描述了并行性。

并行计算群集

图1是典型的示意图并行计算簇。灰色框是单独的计算机,每个计算机都有自己的机箱,电源,光盘驱动器,网络连接和内存。浅蓝色盒子是微处理器。每个微处理器内的深蓝色框都是计算核心。绿色盒子是主要的记忆。有几种不同的内存模型。在某些设计中,每个核心都有统一访问整个内存。在其他情况下,内存访问时间不统一,我们的绿色记忆盒可以分为两组连接到每个处理器或核心的两组或四个部分。

图1.典型的并行计算集群。

在MathWorks,我们有几个这样的群集,运行Linux和Windows操作系统。一个有16个双处理器,双核计算机。每台机器都有两个AMD Opteron 285处理器,每个处理器都有两个核心。每台计算机还有四个千兆字节的内存,它由该机器上的四个核心共享。因此,我们拥有多达64个单独的计算流,但只有16个主要存储器。我们称之为HPC实验室,用于高性能或高生产率计算,即使它们肯定不是超级计算机。

我们的HPC实验室拥有一流的超级计算机上的一个重要优势:一个人可以接管整个机器进行交互式使用。但这是一种奢侈品。当几个人共享并行计算设施时,它们通常必须将作业提交给队列,以便在机器许可证上作为时间和空间处理。大型互动计算很少见。

第一个版本分布式计算工具箱已发布于2005年发布,提供了在这种环境中管理多个独立的Matlab作业的能力。2006年发布的第二个版本增加了MATLAB的MPI绑定,工业之间的行业标准。由于Matlab代表“矩阵实验室”,我们决定将每个实例称为“实验室”并介绍numlabs.,工作中涉及的实验室数量。

从分布式计算工具箱版本的3.0开始,MathWorks为新的编程构造的支持增加了,该构造以Matlab超出了令人尴尬的平行,多个工作的多个工作方式。金宝app

在多个MATLAB任务中使用多线程数学库

这个实验的起点是,源代码长椅例子。我删除了图形任务和所有报告生成代码,只需四个计算任务:

  • - 使用ODE45在长时间间隔内解决van der Pol常微分方程
  • FFT.- 使用FFTW计算长度矢量的傅里叶变换20.
  • - 使用lapack到一个1000×1000真实密集的矩阵
  • - 使用A \ b求解稀疏线性系统,具有331,823个非南极洲订单66,603

我使用了分布式计算工具箱和MATLAB分布式计算引擎运行这种剥离的多个副本长椅。计算是令人尴尬的并行 - 一旦开始,任务之间没有通信,直到在运行结束时收集执行时间结果。计算也是多线程。

图2至5中的曲线显示了在许多实验室上的许多多线程任务的执行时间对一个实验室的单个线程任务的执行时间与执行时间的比率。水平线代表完美的效率 -P.任务可以完成P.实验室同时在一个实验室中执行一项任务。第一个也是最重要的一点是,对于所有四个任务,蓝色曲线无法从水平线无法区分,最多16个实验室。这表明如果每个计算机最多的任务,则单线程任务会得到完美的效率。这很难令人惊讶。如果对这些令人尴尬的并行任务不正确,那将是我们的硬件,软件或测量中严重错误的标志。然而,在16多个实验室或每个实验室中的一个以上的线程,而且性能更加寄存。要了解为什么,我们需要单独查看每个计算。

ode任务(图2)是许多MATLAB任务的典型:它涉及解释的M代码,重复函数调用,颂歌求解器的每个步骤的适度数据量,以及许多步骤。通过这项任务,我们可以获得完美的效率,甚至最多64个实验室。每个核心都可以处理一个实验室的所有计算。内存需求不占主导地位。使用多个线程没有效果​​,因为任务没有访问任何多线程库。实际上,目前尚不清楚可以使用多线程。

图2. ode任务的执行速度比。

FFT任务(图3)涉及长度的向量n = 220.。这n log n复杂性意味着每个矢量元素只有少数算术运算。该任务几乎具有16个实验室的完美效率,但超过16个比率恶化,因为多个核心无法从内存中获取数据。64个实验室完成64个任务需要的时间约为40%,超过一个实验室完成一个任务的时间。同样,多个线程没有效果​​,因为我们不使用多线程FFT库。

图3. FFT任务的执行速度比。

Lu Plot中的蓝线(图4)显示,每实验室只有一个螺纹,我们得到了很好但不完美的效率,最多64个实验室。64个实验室完成64个任务需要的时间只有大约6%超过一个实验室完成一个任务的时间。矩阵顺序是n = 1000.。这N.2存储与FFT任务大致相同,但是N.3.复杂性意味着每个元素都被重用多次。底层Lapack分解算法有效地利用缓存,因此只有16个主要存储器的事实不会对计算时间产生不利影响。

图4. LU任务的执行速率和不同级别的多线程。

Lu Plot中的绿色和红线显示,使用每个实验室的两个或四个线程是一个优势,只要线程数量的数量不超过核心数。通过此限制,每个实验室的两个线程比一个线程快约20%,每个实验室的四个线程比一个线程快约60%。这些百分比与较大的矩阵和较小的矩阵更大。具有超过64个线程 - 即,使用每个实验室的两个线程的32个实验室,或使用每个实验室的四个线程的16只实验室 - 多线程变得适得其反。

稀疏任务的结果(图5)是最不典型的,但也许是最令人惊讶的。蓝线再次表明,只有每实验室只有一个螺纹,我们获得了良好的效率。然而,红色和绿线表明多线程总是始终适得其反 - 至少对于这种特定的矩阵。Cholmod是蒂姆戴维斯开发的超鼻稀疏的线性等式求解器,最近被引入Matlab,但在我们担心多线程之前。算法从稀疏数据结构切换,当每个非零矩阵元素的浮点操作超过指定阈值时,不使用BLAS的稀疏数据结构和多线程BLA。超数算法涉及高矩形矩阵的操作。似乎BLA不合解这些矩阵。我们需要重新审查Cholmod和Blas,使他们能够更有效地工作。

图5.稀疏任务的执行速度比和不同级别的多线程。

发布2007年 - 91467V00

下载188bet金宝搏使用的产品

了解更多

    查看相关功能的文章

    查看相关行业的文章