技术文章和通讯

加速MATLAB算法和应用程序

Sarah等待Zaranek比尔•周Gaurav沙玛,和Houman Zarrinkoub, MathWorks


本文描述的技术,您可以使用它们来加速你的MATLAB®算法和应用程序。主题包括:

评估代码的性能
采用高效的串行编程实践
处理系统对象
多核处理器上执行并行计算和gpu
生成C代码

每个部分集中在一个特定的技术,描述了底层加速技术,并解释当它是最适用的。你的编程知识,算法的类型你想加速,和硬件可以帮助指导你选择技术1

评估代码的性能

修改你的代码之前,您需要决定你的努力。两个关键工具来支持这个过程代码分析器和MAT金宝appLAB分析器。MATLAB编辑器中的代码分析仪检查代码当你写它。代码分析器识别潜在的问题和建议修改,从而最大限度地提高性能和可维护性(图1)。代码分析器的报告可以在整个文件夹运行,使您可以查看所有代码分析器的建议在一个文档一套文件。

图1所示。MATLAB代码分析器显示推荐的代码更改以提高性能。
图1所示。MATLAB代码分析器显示推荐的代码更改以提高性能。

分析器显示代码花费的时间。它提供了一个总结报告的执行代码,包括所有功能的列表,每个函数被调用的次数,并在每个函数所花费的总时间(图2)。该分析器还提供了时机每个函数的信息,比如这行代码使用最处理时间。

图2。分析器总结报告。
图2。分析器总结报告。

一旦你确定了瓶颈,你可以关注如何改善这些特定部分的代码的性能。当你实现优化和技术来加速算法,性能分析可以帮助你测量的改进。

采用高效的串行编程实践

通常是一个很好的实践优化你的串行代码性能考虑并行计算之前,代码生成,或者其他方法。两个有效的编程技术来加速你的MATLAB代码预先配置向量化

通过预先配置,您初始化数组使用所需的最终大小的数组。预先配置可以帮助你避免动态调整数组,特别是当代码包含循环。因为数组在MATLAB在连续的内存块,反复调整阵列通常需要MATLAB花时间寻找更大的连续内存块,然后把那些块数组。通过preallocating数组,您可以避免这些不必要的内存操作和提高整体执行时间。

向量化的过程是将代码使用循环转化为使用矩阵和向量操作。MATLAB矩阵和向量的计算使用processor-optimized库。因此,通常可以通过vectorizing代码提高性能。

矢量化MATLAB计算,使用更大的数组可能适合使用使用GPU加速。在这种情况下,循环不能矢量化,您通常可以使用一个平行的循环(parfor)或c代码生成加速算法。上看到的部分并行计算和从MATLAB生成C代码这些技术的更多细节。

了解更多关于分析,预先配置,向量化,其他系列技术以提高性能。

利用优化算法使用系统对象

您可以使用系统对象加速MATLAB代码主要领域的信号处理和通信。MATLAB系统对象的面向对象的实现算法中可用的系统工具箱,工具箱包括通信系统和DSP系统工具箱。通过使用系统对象,您脱钩宣言(系统对象创建)算法在系统的执行对象。这种解耦导致更有效的循环计算,因为它允许您执行参数处理和只初始化一次。您可以创建和配置一个系统对象的实例外循环,然后调用步骤方法在循环执行它。

大多数系统DSP系统工具箱中的对象和通信系统MATLAB工具箱实现为可执行文件(mex files)。这个实现可以加快仿真,因为许多算法优化中包含的墨西哥人实现对象。看到从MATLAB生成C代码的部分mex files的更多细节。

了解更多关于流处理系统对象,创建您自己的系统对象,模拟信号处理算法(46:48)在MATLAB使用系统对象。

执行并行计算

到目前为止所描述的技术都集中在优化串行MATLAB代码的方法。你也可以获得性能改进通过使用额外的计算能力。MATLAB并行计算产品提供计算技术,让你利用多核处下载188bet金宝搏理器,计算机集群,gpu。

多核处理器和集群上使用MATLAB的工人

并行计算工具箱让你运行多个MATLAB工人(MATLAB计算引擎)在桌面上多核机器。你可以加快应用程序通过将计算在这些工人。这种方法会给你更多的控制比与MATLAB中的内置多线程并行性。它通常用于粗粒度的问题,如参数扫描和蒙特卡罗模拟。对于更大的加速,并行应用程序使用MATLAB工人可以扩展到使用MATLAB并行计算机集群或云服务器

几个工具箱,包括优化工具箱和统计和机器学习工具提供算法,可以利用multiworker并行加速你的计算2。在大多数情况下,您可以使用并行算法,只需打开一个选项。例如,运行fmincon在并行优化工具箱“UseParallel”选项设置为“总是”。

并行计算工具箱提供了高级编程构造等parfor。使用parfor你可以加速循环在MATLAB代码中除以循环迭代同步执行跨几个MATLAB工人(图3)。

图3。迭代的parfor-loop分布在多个MATLAB工人在多核计算机上。
图3。迭代的parfor-loop分布在多个MATLAB工人在多核计算机上。

使用parfor必须独立,循环迭代,迭代没有依赖任何其他。加快相关的或基于状态的循环,你可以重新排序计算,这样循环变得order-independent。或者,你可以把一个外循环包含并行化循环。如果这些选项不可行,优化的主体循环或考虑生成C代码。

通过客户端和MATLAB工人之间传输数据parfor循环,将会导致沟通成本。这意味着使用可能没有优势parfor当你只有少量的简单计算。如果是这样的话,而不是关注并行外循环包含简单循环。

批处理命令可用于分配独立的计算在MATLAB工人为离线处理批处理作业。这种方法尤其有用,当这些计算需要很长时间才能运行,你需要释放你的桌面MATLAB的其他工作。

使用gpu

最初用于加速图形渲染、图形发展单元(gpu)也可以应用于科学计算在信号处理、计算金融、能源生产等领域。

你可以直接从MATLAB在NVIDIA gpu执行计算。FFT、传输线和线性代数操作超过100内置的MATLAB函数可以直接在GPU上执行。这些重载函数运行在GPU和CPU,根据传递的参数的数据类型。当给定一个输入参数GPUArray(一种特殊的数组类型提供的并行计算工具箱)这些函数会自动运行在GPU上(图4)。几个工具箱,包括通信系统工具箱和信号处理工具箱,还提供GPU-accelerated算法。

图4。串行代码和代码转换为运行在GPU GPUArrays使用重载函数。
图4。串行代码(左)和代码转换为运行在GPU(右)为GPUArrays使用重载函数。

两个拇指规则将确保您的计算密集型问题是适合GPU。首先,您将看到最佳的性能在GPU核心都是忙碌,利用GPU的固有的并行特性。代码使用矢量化MATLAB计算大型数组和GPU-enabled工具箱函数都属于这个类别。第二,应用程序所需的时间运行在GPU上应该远远超过CPU和GPU之间传输数据所需的时间在应用程序执行期间。

对于更高级的GPU的使用,如果您熟悉CUDA编程,你可以直接从MATLAB运行现有CUDA-based GPU内核。然后,您可以使用MATLAB中的数据分析和可视化功能,更直接的控制你的GPU的算法。

了解更多关于使用parfor批处理,MATLAB在多核、多处理器机器上运行,与MATLAB GPU计算,工具箱内置平行和GPU-enabled算法

从MATLAB生成C代码的代码

替换部分的MATLAB代码自动生成的MATLAB可执行(MEX-function)可能产生加速效果。使用MATLAB编码器,您可以生成可读和可移植的C代码和编译成MEX-function取代部分相当于你的MATLAB算法(图5)。你也可以利用多核处理器通过生成MEX-functionsparfor构造。

图5。MATLAB编码器菜单生成一个墨西哥人的功能。
图5。MATLAB生成MEX-function编码器菜单。

加速实现的数量取决于算法的本质。最好的方法来确定加速度是使用MATLAB生成一个MEX-function编码器和测试加速。如果你的算法包含单精度的数据类型、定点数据类型,循环状态,或不能向量化的代码,你可能会看到加速效果。另一方面,如果你的算法包含MATLAB隐式多线程计算等fft圣言会、函数调用IPP或布拉斯特区库函数优化执行fft算法等在MATLAB上电脑或算法,您可以vectorize代码,加速效果是不可能的。MATLAB编码器,遵循最佳实践c代码生成,咨询MathWorks技术专家找到最好的方法来加速你的算法使用这种方法。

大部分的MATLAB语言和几个工具箱支持代码生成。金宝appMATLAB编码器提供了自动化工具来帮助你评估你的算法的代码生成准备和指导您完成的步骤c代码生成(图6)。

图6。MATLAB工具评估代码生成准备和引导你开始生成C代码。
图6。MATLAB工具评估代码生成准备和引导你开始生成C代码。

可能的性能提升

可以加速你的MATLAB应用程序通过写作有效算法,并行处理,代码生成。每个方法都有一系列可能的加速效果,根据问题和您正在使用的硬件。基准和加速度的例子列在这里给出一个大致的加速度。

了解更多关于性能使用parfor,不同类型的支持GPU的功能金宝app,内置的GPU支持系统对象金宝app,c代码生成

结合技术

通常可以获得额外的加速度通过结合本文中描述的方法。例如,parfor循环可以调用基于c MEX-functions、代码生成支持许多系统对象,和矢量化MATLAB代码可以适应在GPU上金宝app运行。

了解更多关于使用多个技术加快仿真通信算法和4 g LTE系统的设计。

1本文不涉及性能局限性造成的内存交换等问题或文件I / O。有关这些主题的更多信息,请参阅策略有效地使用内存数据导入和导出

2当使用并行计算工具。

2013 - 92091 v00出版