Gabriel Ha,Mathworks
这个视频附带了一个介绍MATLAB并行计算的实践工作坊®和仿真软万博1manbetx件®,这样您就可以使用多核处理器、gpu和计算机集群来解决计算和数据密集型问题。通过工作通过常见的场景并行MATLAB算法和运行多个Simulink并行仿真,您将获得对MATLAB和Simulink并行计算的理解,并了解最佳实践。万博1manbetx
随着视频,练习和例子提供了加强如何使用MATLAB和Simulink并行计算。万博1manbetx工作坊练习和示例的难度从简单的并行使用概念到更高级的技术都有所不同。
突出了
•通过并行计算加速MATLAB应用程序
•并行运行多个Simulink仿真万博1manbetx
•GPU计算
•卸载计算和集群计算
•处理大数据集
大家好,欢迎来到这个关于MATLAB和Simulink并行计算的研讨会。万博1manbetx并行计算是一个重要的课题,因为工程师和研究人员面临的问题越来越大,越来越复杂。此外,随着技术的发展,人们对更快、更有效的结果的期望也在增加。
MATLAB和Simulink中的并行计算使任何部门或行业的工程师万博1manbetx、科学家和研究人员能够利用随时可用的计算资源,而无需成为并行计算专家。下面是一些使用MATLAB并行计算工具来提高工作速度的MATLAB客户体验到的实际性能提升的例子。本讲习班将指导您完成相同操作的步骤和技巧,并请记住,并行竞争硬件正变得越来越普遍和可用。
多核处理器已经成为标准,能够进行计算的GPU设备也变得越来越普遍。此外,对集群和云环境的访问也在不断增加,从而提供了使用普通工作站上无法使用的计算资源的能力。无论您是计划利用多核处理器、计算集群还是gpu,优化代码都是很重要的,以便在引入并行工具以获得额外的计算能力时获得更好的性能改进。
让我们突出显示一些步骤,以优化代码。在修改您的代码之前,您需要确定将您的努力集成的位置。也许支持这个过程的最关键的工具是探查器,可以通过告诉您您的代码在大部万博1manbetx分执行时间内,帮助您找到瓶颈。改善这些领域为您提供了最大的表现推动力。
一旦确定了投资领域,就可以使用有效的编程技术,如预分配和矢量化,以加速MATLAB代码的执行。MATLAB代码分析器可以帮助您提供这方面的建议,并将您的代码中的问题和错误带到您的注意。最后,您还可以通过使用自动生成的MATLAB可执行文件(称为MEX函数)替换部分MATLAB代码来获得速度。你可以使用一个叫做MATLAB Coder的独立产品来做这件事。
值得注意的是,即使没有并行计算工具箱,MATLAB也通过其内置的多线程提供了隐式多核支持。万博1manbetx越来越多的核心MATLAB函数利用了底层多线程库支持,其他工具箱在使用核心MATLAB函数时也利用了这些优势。万博1manbetx然而,并不是每个MATLAB函数都可以是多线程的,任何加速都仅限于您的本地工作站上。因此,并行计算工具使您能够获得超越这些限制的好处。
换句话说,“并行计算工具箱”使您能够直接控制并行资源。例如,像parfor这样的并行构造可以控制工作流的哪些部分分布到多个核中。稍后,我们将讨论如何通过使用MATLAB并行服务器将该级别的控制扩展到计算集群上的资源。
以下视频剪辑将清楚地展示使用MATLAB中的并行计算获得的性能改进,具体与Parcol。我们有三种不同的场景,我们在三个不同的计算环境中运行相同的参数扫描代码,单个桌面工作站,200个核心集群以及1,000个核心群集。如您所见,使用1000个核心提供了非常显着的加速。
也就是说,我们应该提到,在一个问题中投入更多核心并不总是能得到相应更快的结果。一般的经验法则是,如果您的模型或应用程序是计算密集型的,并且您有大量的独立迭代要完成,那么您可能会有效地利用大量的核心来加快您的总体执行时间。讨论了并行计算的动机和有用性之后,让我们讨论一下如何在MATLAB中使用它。
我们将开始讨论在桌面计算机上使用多核,在那里也将学习一些并行计算的基本原理,如工作者的概念和parfor如何像工作者的概念,以及parfor循环如何工作。之后,我们将讨论如何使用gpu,然后扩展到集群或云环境。然后,我们将给出一些使用大数据并行计算的技巧。
MathWorks提供了两种并行计算工具。我们多次提到并行计算工具箱,我们现在将讨论它。稍后,我们将讨论MATLAB并行服务器。那些被许可使用并行计算工具箱的人将把它安装在MATLAB旁边。我们将使用术语MATLAB客户端来指代安装了工具箱的机器。
工具箱通过使用Matlab计算引擎称为工人,您将更加富有成效。这些工人由Matlab会话控制,并允许您使用硬件的全部潜力加快工作流程。您可以以交互方式使用工人或发送工作,以便在后台运行。工人构成基于CPU的并行工作流程的基础。
当您有一组具有进程间通信的工作者时,我们称之为并行池。您可以使用MATLAB代码以编程方式初始化和管理并行池,或者从MATLAB桌面环境中的这个图标交互地初始化和管理并行池。并行计算工具箱处理划分任务和计算并将它们分配给并行池中的工作人员所涉及的工作,从而使您的资源能够执行并行计算。
后台工作都封装在易于使用的语法中。有时简单到只需更改一个单词,而且您永远不必离开对MATLAB桌面环境的熟悉。通常,运行的MATLAB工作程序不应该超过机器可用物理核的数量,否则可能会出现资源争用。
既然我们已经介绍了通过worker实现并行计算的基础知识,现在让我们讨论一下使用它们可以做什么。MATLAB中的一些并行结构更容易开始,但提供的控制更少。另一些则需要更多的并行计算知识,但提供更细粒度的控制。我们将从最容易使用的开始,然后逐步深入。大量的MATLAB工具箱都内置了自动并行支持。万博1manbetx
如果您发现一个函数具有并行支持,并且它包含在您的瓶颈中,您可以用很少的努力加快您的万博1manbetx代码。下面是具有自动并行支持的跨不同应用程序的函数示例。万博1manbetx底部的链接将为您提供具有自动并行支持的工具箱和函数的完整列表。万博1manbetx类似地,在Simulink的工具箱中许多并行启用的块集可以帮助您以很少的努力加快您的工作流。万博1manbetx
例如,Simulink设计万博1manbetx优化与并行计算工具箱有最好的集成。您只需启用一个复选框,在优化期间使用并行池,它将立即加快工作流程,如敏感性分析、响应优化和参数估计。同样,您可以使用底部的链接查看自动并行支持的完整列表。万博1manbetx
让我们进入下一个阶段。如果您的瓶颈不涉及具有自动并行支持的函数,那么在MATLAB中有大量的并行构造,可以让您更好地控制什么以及如何瘫痪。万博1manbetxMathWorks的并行计算团队正在积极地添加更多的结构并改进现有的结构。如前所述,根据具体问题,并行计算并不总是给你比例提高,然而,有理想的并行计算,计算量问题是多个任务,迭代,或模拟不相互依赖来完成他们的计算。
现实世界这些问题的例子是蒙特卡罗模拟,参数扫描和设计优化,以及解决这一挑战的最简单方法是与循环平行使用。例如,假设您想要运行您的代码的五个迭代。如果您在For循环中运行它,则它们串行运行,一个接一个。在移动到下一步迭代之前,你等待一个完成。但是,如果它们是单个迭代之间没有所需依赖关系或通信的所有独立任务,则可以将这些任务分发到单独的工人并同时对它们进行并行计算。
这样可以最大限度地利用您的机器上的课程,并更快地得到结果。并行for循环是使用parfor命令实现的。虽然需要并行计算工具箱能够利用worker进行并行处理,但它实际上仍然可以在没有它的情况下运行。这意味着您可以与可能无法访问并行计算工具箱的同事和协作者共享使用parfor的代码。
在这种情况下,parfor的行为与传统的for循环类似,只是迭代顺序不同。在本例中,我们希望使用一个典型的串行for循环,并使用我们的多核处理器并行运行它。这个for循环中的迭代彼此不依赖,也不需要在彼此之间传递信息。这里我们所要做的就是将for循环改为parfor循环,这将自动地在多个worker之间并行地运行迭代。
Parfor将自动将任务分配给可用的工作人员,并在完成后收集结果。当将for更改为parfor时,您可能需要对代码进行一些调整。代码分析器将通过通知您运行parfor循环需要进行哪些更改来帮助您完成这个过程。
在本例中,不显示任何警告,也不需要额外的代码更改。在第二个代码略有不同的示例中,代码分析器确定存在问题,并将其提交给我们。下面的插图将让您更深入地了解执行parfor时会发生什么。在这个例子中,MATLAB可以访问三个工人。它们被分配了要运行的任务,一旦一个worker完成了它的当前任务,它就可以被分配额外的工作。
最后采集结果并在MATLAB中显示。当MATLAB将parfor循环中的名称识别为变量时,该变量将被分类为右侧表中所示的几个类别之一。对运行时有重大影响的两种变量类型是片变量和广播变量。切片变量是一个变量,它的值可以被分割成段或片,然后由不同的工作人员分别操作这些段或片。
循环的每次迭代都在阵列的其他片段上工作。使用切片变量可以减少客户端和工人之间所需通信的金额。广播变量是循环变量以外的任何变量,也是在循环内部不会更改的切片变量。在Parcom循环开始时,任何广播变量的值都将发送给所有工人。这意味着大的广播变量可以花费大量的开销,因为必须在客户端和工人之间传输它们。
因此,通过尝试使用更多的切片变量来优化parfor循环,并保持任何必要的广播变量都很小,以减少并行开销。另一个常见的并行构造是parfeval,是parallel feval的缩写。这种并行构造类似于parfor循环,因为它利用并行工作程序并行地运行多个任务。
不同之处在于,它只在函数上运行,而对于MATLAB来说,它是异步的或非阻塞的。与parfor循环不同,parfeval允许您在后台完成并行工作时继续在MATLAB中执行命令。Parfeval创建一个任务队列,每个任务在一个并行工作器上执行一个函数。
队列使得队列中的下一个项目始终在池中的下一个可用工作者上执行,从而保留执行顺序。任务排队执行后,您可以自由地在其他任务上使用MATLAB,而无需等待排队任务。完成后,您可以使用fetchnext检索计算结果。
您还可以从队列中添加或删除任务。Parfeval也以与parfor不同的方式将工作分配给并行工作者。正如您所看到的,parfeval每次只传输一个任务,而不是将一组任务传输给并行的worker。如果您的任务或迭代具有显著不同的运行时间,parfeval将有助于避免因分组任务而导致的空闲工作者。
也就是说,parfor仍然是最可能的解决方案,但如果需要保持执行顺序,如果需要一个并行队列,或者如果您想在后台执行计算时继续使用MATLAB,请记住parfeval。数据队列允许您将数据从并行工作人员传递回MATLAB客户机。一个有用的应用是可以查看并行计算的进度。
首先,我们构造数据立方体并创建一个权重条,我们将使用它来查看进度。然后,我们指定每次工作者触发数据队列时将发生什么操作。在本例中,我们希望运行一个函数并更新权重条,它将更新权重条。我们使用after each构造在parfor中的每次迭代之后触发end update weight bar函数,这是由send构造指示的。
您也可以使用Parfeval后使用。作为Parcer运行,工人在计算完成后通知客户端。这触发了最终更新权重栏功能,该函数更新并行工人的指示进度。
这个工作流的关键组成部分是数据q。在每次迭代之后,发送您提供的函数,以便在每次迭代之后运行。虽然你可以在Simulink中技术上使用parfor,但parfor主要是为MATLAB万博1manbetx设计的,不推荐与Simulink一起使用。相反,使用parsim并行运行多个模拟。
Parsim将多个模拟分配到多核cpu,以加快整体模拟时间。它自动创建并行池,识别文件依赖关系,并管理构建构件。它还与一个新的模拟输入对象一起工作,该对象可以帮助您以一种方便的方式设置所有模拟输入,包括变量、块参数和模拟配置。
此时,我们已经谈到了自动并行支持和常用编程构造。万博1manbetx并行计算工具箱还提供高级并行构造,以便为您的资源进行最大控制,例如配置并行工人互相通信,并跨越多个机器的内存拆分大矩阵,并使用大型数据存储库。由于这些主题可能没有广泛的吸引力,如果您想了解更多,您可以在此演示文稿结尾检查资源。
产品文档和技术支持也可以帮助您解决问题。万博1manbetx并行计算工具箱,使您使用NVIDIA gpu加速AI,深度学习,和其他计算密集型分析,而不必是一个[?QDA ?]程序员。MATLAB有数百个功能,支持使用NVIDIA gpu使用,您将能够访问多个万博1manbetxgpu在桌面或集群上,生成[?QDA ?]代码等等。
要在你的工作站上使用GPU,你只需要MATLAB和并行计算工具箱。你还需要确保你有一个支持NVIDIA GPU设备和一个最新的图形驱动程序。万博1manbetx最好的做法是确保您的设备是最新的驱动程序。gpu有数百个——有时是数千个——具有非常集中的指令集的核心。
在MATLAB中桌面或单个工作器是所有需要利用整个GPU的优势。在深度学习工具箱中,如果你设置了一个标志并有一个合适的GPU,像火车网络这样的函数可以使用GPU。此外,如果你提供一个GPU数组参数,MATLAB和其他工具箱中的数百个函数将重载使用GPU,我们将很快讨论这个参数。
底部的链接将带你到在GPU上运行MATLAB函数的文档,在那里你也可以找到GPU支持的函数列表。万博1manbetx不是所有的问题都适合GPU。GPU计算的理想问题是大规模并行和/或计算密集型问题。大规模并行意味着计算可以分解成数百或数千个独立的工作单元。
当所有的内核都处于忙碌状态时,利用GPU固有的并行特性,你会看到最好的性能。计算密集型是指在计算上花费的时间远远超过了在GPU内存之间传输数据的时间。GPU有一个高速的内存总线用于GPU内部的数据传输。然而,GPU必须使用慢得多的PCI快速总线来与CPU通信。
这意味着您的总体计算加速将被设备之间传输数据所需的时间所减少,正如MATLAB开发人员编写的算法所需要的[?关键的MATLAB和工具箱函数的版本,这是作为重载函数提出的。当输入在GPU内存中时,函数的GPU版本将运行。在右边的示例中,我们最初在CPU上创建了一个矩阵。
使用GPU数组,我们将该矩阵的副本发送到GPU。然后我们在该矩阵上执行FFT函数,并注意即使没有使用GPU的显式指令,Matlab也会看到矩阵驻留在GPU上,我们使用GPU而不是CPU执行计算。这意味着您可以使用GPU进行更快的计算,同时仍然使用相同的基础代码。计算完成后,您可以收集结果并将其视为正常的Matlab。您可以使用高级GPU进一步加速您的代码[?QDA?]和MEX编程。
您可以通过咨询产品文档和技术支持了解更多信息。万博1manbetx现在我们已经对MATLAB中的并行计算有了基本的了解,让我们讨论一下如何开始将工作流迁移到集群或云以获得更强的计算能力。毕竟,您处理的问题或挑战可能需要额外的计算资源或内存,超出单个多核桌面机器的可用容量。
MATLABPLASSPLATER服务器使您可以扩展桌面工作流程,以访问集群中多台计算机的额外计算电源和内存,无论是在组织中的前提,还是在云上。在建立基础架构时可能需要支持您的IT人员的支持,但您可以在不留下MATLAB桌面环境的情况下向群集发万博1manbetx送作业。在Matlab中的其他并行计算工具的相同精神中,您在桌面机器上开发的代码可以在群集中运行,而无需重新介绍您的底层算法。您可以使用群集以获取额外的计算能力,或者只是为了释放您的桌面计算机进行其他工作,我们将很快与批处理工作流程讨论。
要扩展到集群,您需要在MATLAB客户端工作站上使用MATLAB和并行计算工具箱,以及代码所需的任何其他工具箱的许可证。在集群端,您只需要MATLAB并行服务器。不是检查工具箱许可证,每个MATLAB并行服务器工作者动态地许可证工具箱和块集,以匹配来自提交客户端的许可证。
您可以通过在代码中以编程方式定义代码或使用集群概要文件通过MATLAB UI来选择运行代码的位置。默认情况下,您将拥有本地概要文件,它将在MATLAB客户机上运行工作程序。您可以创建或导入其他配置文件,这些配置文件将指向远程硬件上的工作人员。
您可以有多个配置文件来访问不同的群集环境,并且您可以将作业从同一MATLAB会话中提交给不同的配置文件。您甚至可以在群集中具有交互式并行池,这对于调试和原型设计非常有用。请注意,您的MATLAB客户端只能一次与一个并行池交互。
MATLAB中的并行计算支持跨平台提交,这意味着您的MAT万博1manbetxLAB客户端运行的操作系统可能与集群操作系统不同。因为MATLAB语法在所有平台上都是相同的,所以不需要重写算法。当然,您需要确保代码没有使用硬编码的操作系统特定的文件引用。Parallel Computing Toolbox包括一些特性,如附加路径和附加文件,这些特性有助于解决与集群上的工作人员共享代码和数据的潜在问题。
根据您的系统和网络配置,您可以使用PAR池以交互方式使用群集的工人,这对于原型化和调试非常有用。对于长期运行的工作,您将希望过渡到批量工作流,我们以前在传递中提到过。您可以使用批处理命令发送代码以在已安装和配置MATLAB并行服务器的远程硬件上运行。
使用计算机使用批次的工作工作,以便您的机器不再与计算相关联。这意味着你可以做别的东西,把你的机器睡觉,甚至关闭它。默认情况下,该命令将请求单个工人进行串行计算,但您可以包含池参数以请求多个工人进行并行计算。
您可以提交多个批作业,当资源可用时,集群端的调度程序将调度工作。您可以在日记命令中用这些状态检查作业的状态和进度,日记命令可以通过MATLAB命令窗口以编程方式使用,也可以通过作业监视器以交互方式使用。作业完成后,您可以在MATLAB中检索结果,或者在集群的文件系统上查看作业生成的工件。
您还可以使用Simulink利用批处理处理。万博1manbetxBatchsim通过将模拟卸载到Matlab并行服务器上的远程硬件上的Matlab并行服务器,释放您的桌面资源。请注意,如果您已在代码中使用Parsim,则可以将Parsim更改为BatchSim,指定池参数,并以批次运行模拟。完成后,您可以在方便的方便中检索仿真结果,以进一步处理您的桌面。
通过对MATLAB中并行工具的更全面的理解,我们可以看到MATLAB如何为在桌面或集群上处理大数据提供一个单一的、高性能的环境。有MATLAB能力定制的初学者和高级用户的大数据应用程序。您将能够使用像数据存储和高数组这样的结构来访问内存中不合适的数据。
您将能够使用像数据存储和高数组这样的结构来访问内存中不合适的数据,使用来自Hadoop分布式文件系统或HDFS的数据,访问基于云的存储,并创建大量图像、电子表格和自定义文件的存储库。虽然您还需要学习更多的函数,但它们都使用您已经熟悉的相同的直观MATLAB语法。您可以使用小数据集快速创建算法原型,然后使用相同的代码扩展到存储在大型集群中的大数据集并在大型集群上进行处理。
高阵列提供了一种可视化,解析和分析数据的方法,即使由数百万或数十亿的行组成,不能适合您的机器随机存取存储器或RAM。它们由数据存储备份,该数据存储是一个位于机器,云或群集上的大量文件的存储库。许多操作和函数重载以使用高阵列,使用与您在Memory Matlab阵列中的正常使用相同的语法。高阵列围绕其中一个数据存储,并将整组数据设置为一个连续的表或数组。
底层数据存储使计算能够一次只对数组中的一块进行运算。所有这些都是在幕后完成的,作为用户,您只需编写看起来像普通MATLAB代码的代码。例如,如果我们从包含表格数据的多个CSV文件构建一个高数组,那么得到的高数组就是一个高表。即使这个表不适合内存,我们也可以使用像summary或点引用这样的标准表函数来访问列,然后使用max, min, plus, minus,就像在内存表中使用常规表一样。
由于这些部分是独立处理的,您可以使用并行计算工具箱使其瘫痪,并一次处理多个部分。当然,您可以使用MATLAB Parallel Server在多台计算机上扩展高数组。分布式数组是一种并行数据类型,它使用多台机器的内存来存储太大而无法在一台机器上存储的变量。
使用分布式数组,您可以将矩阵分布到多台计算机,从而超越了单个计算机的能力。您可以使用并行计算工具箱在桌面上创建分布式阵列工作流的原型,然后扩展到使用MATLAB并行服务器的集群。本着同样的精神使事情变得简单,大量的标准MATLAB函数使用与普通数组相同的语法与重载函数一起使用分布式数组。
这意味着您可以以与内存算法相同的方式编程和分发阵列算法,而MATLAB将基于输入数据类型运行代码的正确版本。这使您能够利用分布式计算,而无需成为消息传递的专家。在此示例中,我们在具有小型数据样本的本地计算机上使用分布式阵列开发和原型算法。
一旦我们确信我们的算法有效,我们只需要改变我们的集群配置文件,在整个数据集上运行相同的算法,并在集群上扩展。使用数据存储,我们可以访问多个文件,每个文件都包含我们将在计算中使用的矩阵的一部分。我们使用分布式数据存储来允许数据跨工作池分布,从而允许将矩阵作为一个单独的实体进行处理。
我们可以通过存储在本单个文件中的小矩阵或一小组文件本地测试,然后通过更改配置文件来访问群集并使用访问整个数据集的数据存储来轻松扩展,这将包括更大的矩阵.请注意,在圆圈代码之外,其余代码完全相同。随着我们包装,我们还将为您提供一些资源以获取更多信息。希望您能够多次看到Matlab的主题,使您能够轻松使用强大的计算资源和技术,因此您可以专注于您的算法和研究。
您不需要成为并行编程专家就可以开始,如果您想从资源中获得更多的性能,您总是可以深入研究更高级的技术。这些资源包括您的机器已经可用的硬件,以及gpu或机器集群的额外计算能力。无论您是在开发串行算法还是并行算法,您都可以使用熟悉的MATLAB语法在本地开发和原型,然后扩展到集群或云,而无需重写底层代码。
以下是关于本演示文稿中提到的主题的一些资源。对于这些主题和更多的问题,请随时与我们联系。技术支持或您的客户经万博1manbetx理我们将很乐意帮助回答您可能拥有的任何问题。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获得最佳网站性能。其他MathWorks国家网站未优化您所在地的访问。