MATLAB';内置的并行处理和分配到内核?

MATLAB';内置的并行处理和分配到内核?,matlab,parallel-processing,Matlab,Parallel Processing,我计划买一台工作站来运行我的matlab数据分析脚本。我计划将系统内存从6GB增加到24GB。我正在考虑是否应该购买6核处理器、双4核处理器或双6核处理器。(现在我有一个双核处理器) 现在,我认为MATLAB的内置内存管理系统有很大的延迟。(例如,一个函数的执行时间为30秒,但tic和toc显示最后一行代码的执行时间为18秒)。由于对大数据块进行算术处理,我也有一些延迟,但我没有做任何真正繁重的计算 此时,我不愿意/无法显式地并行我的代码。我知道有些人对MATLAB内部有着丰富的经验,所以我希望

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

现在,我认为MATLAB的内置内存管理系统有很大的延迟。(例如,一个函数的执行时间为30秒,但tic和toc显示最后一行代码的执行时间为18秒)。由于对大数据块进行算术处理,我也有一些延迟,但我没有做任何真正繁重的计算


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

我对Matlab的并行计算工具箱有一些经验,我想这正是您所指的,而不是普通的Matlab对内部函数越来越多地使用多线程

并行Matlab不是一个银弹,你不会在8核上获得8倍或12核上12倍的速度的神奇增长,你必须投入一些工作。然而,作为一个将大部分时间花在并行Fortran程序上的人,我要说的是,与Fortran+OpenMP或MPI相比,Matlab提供了一条短得多的路径来实现一个良好的并行程序,其方式和程度与Matlab比Fortran开发更快。但作为一名程序员,您的关注点仍然非常相似:

  • (重新)设计程序以暴露并行性;记住,最好的串行算法在并行化后并不总是最好的;当你有多个核心的蛮力方法,这是如此不雅观和昂贵的单一核心可能是最好的选择
  • 负载平衡:确保每个核心获得大致相同的工作量
  • 最小化并行化开销:这包括消息传递(如果你这样做的话)和线程/进程启动和中断时间;让4个线程在空闲时间内连续运行比每次程序点击串行段时启动和停止它们更有效
  • 最大限度地减少共享内存的争用(如果你这样做的话),既可以防止错误,又可以最大限度地提高速度
  • 不要太在意并行加速,一旦程序对于您的目的足够快,它就足够快了,您的工作目标是数据分析而不是并行程序优化(这是我的工作!)
Matlab的PCT提供了您需要的工具,但您必须卷起袖子。至于垃圾收集器在哪里运行的具体问题,我不知道;我建议你去看看

哪些操作是自动并行的?我解释这意味着什么Matlab函数是多线程的?答案总是越来越多,但对于最新情况,您需要进行测试(查看任务管理器或机器上的任何调用)或阅读文档


就我个人而言,在你的情况下,我会选择双6核处理器,如果我在合理的时间内获得6倍的速度,我会很高兴——如果我不象你那样了解你的代码,很难精确地知道这是多长时间。

按照Amro的建议,我看了这个MATLAB支持文档:

以及

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


现在,我将只使用单六核处理器,因为这有很大的价格差异,而且似乎没有手动优化的多核处理器的速度是有限的。我会确保得到一个NVIDIA图形卡,这样我就可以根据米哈伊尔的建议利用matlab对GPU操作的支持,

你也应该在CSSM中询问。@ustun-CSSM?根据谷歌的说法,马里兰州南部的凯尔特人协会:)啊,:)有了更多的处理器内核,性能可能会有轻微的(比如两倍)提高。随着CUDA的增加将是X10-X100如果你有一些沉重的计算,你需要执行,你也应该考虑工作在云计算,尤其是现在亚马逊提供CPU / GPU集群实例。这里有一个你可以阅读的案例:谢谢你的回答。实际上,我指的是“普通Matlab”固有的多线程。我希望有人知道多线程加速了什么,没有加速什么。例如,我很容易看到MATLAB拒绝并行运行内存管理。因为这是我的一个主要瓶颈,我不想为英伟达处理器不使用的额外处理器提供资金。@ Marc:只要确保NVIDIA卡是最近的一个,并支持CUDA计算能力1.3或更大: