MATLAB的内置并行处理和内核分配效率如何?

时间:2010-11-23 15:48:09

标签: matlab parallel-processing

我打算购买一个工作站来运行我的matlab数据分析脚本。我计划将系统内存从6 GB增加到24 GB。我正在考虑是否应该购买6核处理器,双核4核或双核6核。 (现在我有一个2核处理器)。

目前,我认为MATLAB的内置内存管理系统存在严重延迟。 (例如,一个函数需要30秒才能执行,但是tic和toc显示最后一行代码在18秒执行)。由于对大块数据进行算术处理,我也有一些延迟,但我没有做任何非常繁重的计算。

此时,我不愿意/无法显式并行化我的代码。我知道有些人对MATLAB内部有丰富的经验,所以我希望有人可以指导我MATLAB如何有效地利用多个内核。它会在与计算过程分开的线程中运行垃圾收集器吗?哪些操作会自动并行化?

2 个答案:

答案 0 :(得分:3)

我有一些Matlab的并行计算工具箱的经验,我想这就是你所指的,而不是简单的Matlab越来越多地使用多个线程来实现内部函数。

并行Matlab不是一个灵丹妙药,你不会在8核上获得8倍的速度或在12核上获得12倍的速度,你将不得不投入一些工作。然而,作为一个将大部分时间花在并行Fortran程序上的人,我会说Matlab提供了一个比Fortran + OpenMP或MPI更好的并行程序路径,其方式和程度与Matlab相同。比Fortran更快开发。但是你作为程序员的担忧仍然非常相似:

  • (重新)设计您的程序以暴露并行性;请记住,最好的串行算法在并行化之后并不总是最好的;当你拥有多个核心时,在单个核心上如此不优雅和昂贵的强力方法可能是最好的选择;
  • 负载平衡:确保每个核心的工作量大致相同;
  • 最小化并行化开销:包括消息传递(如果这是你的方式)和线程/进程启动和拆除时间;让4个线程在空闲时间内连续运行比在每次程序到达串行部分时启动和停止它们更有效;
  • 最大限度地减少对共享内存的争用(如果这是你的方式),既可以防止错误又可以最大限度地提高速度;
  • 不要太忙于并行加速,一旦程序足够快你的目的它足够快,你的工作目标是数据分析而不是并行程序优化(这是我的工作!)

Matlab的PCT提供了您需要的工具,但您必须卷起袖子。关于垃圾收集器运行的具体问题,我不知道;我建议你找出来。

哪些操作会自动并行化?我将此解释为 Matlab函数是多线程的?并且答案越来越多,但是对于最新情况,您需要进行测试(观察任务)经理或您机器上的任何内容)或阅读文档。

就个人而言,在你的情况下,我会选择双核6核处理器,如果我在合理的时间内加速6倍,我会很高兴 - 如果不知道你的代码,很难确切知道多长时间和你一样。

答案 1 :(得分:1)

根据Amro的建议,我查看了这个MATLAB支持文档:

Which MATLAB functions benefit from multithreaded computation?

以及

How do I choose computer hardware which best optimizes the performance of MATLAB?

Choosing Hardware for Use with MATLAB®

结果似乎是你的里程可能会有所不同。基本上,似乎特定的函数是多线程的,列表是时间的变化函数。

目前,我将获得单核六核处理器,因为存在显着的价格差异,并且似乎对具有多个核心而没有手动优化的速度有限制。我将确保获得NVIDIA显卡,因此我可以利用matlab对GPU操作的支持,根据Mikhail的建议和the matlab gpu documentation