【问题标题】:Parallel calculation in MatlabMatlab中的并行计算
【发布时间】:2015-12-15 06:04:06
【问题描述】:

我想使用 Parallel Computing Toolbox 加快我的 Matlab 项目。 在我的 PC 中,有 2 个具有 12 个内核的处理器(每个处理器)。所以,我有 24 个核心。 问题是 Matlab 总是只能找到 12 个内核。据我了解,它仅在运行 Matlab 项目的一个处理器中使用内核。但我想使用我所有的 24 个内核。可能吗?如果是,我该怎么做? 我想,我应该建立集群,但集群我必须购买 MATLAB 分布式计算服务器。我不想这样做,因为我不想使用很多电脑……只有我的 24 核电脑…… 感谢您的时间和考虑

【问题讨论】:

  • 发布您如何设置并行会话的代码
  • 你确定每个处理器是 12 个核心,而不是 6 个核心和 12 个线程吗?
  • 我怀疑您有两个带有多/超线程的六核处理器。这使得它实际上有 24 个内核,但 MATLAB 只能看到物理内核。
  • 我敢肯定,我有非常强大的电脑。但我的问题的重点是“我如何在 Matlab 中使用计算机的所有线程?”。 Matlab 给我写信:使用“本地”配置文件启动并行池(parpool)...连接到 12 个工作人员

标签: matlab parallel-processing


【解决方案1】:

有多种方法可以确定并行池中的工作线程数量。例如。使用parpool:

parpool(poolsize)

使用poolsize 工作人员打开一个并行池,前提是您的计算机上可以有该数量的工作人员。

另一种可能性是转到主页->首选项->并行首选项选项卡,并在其中创建一个包含您想要的工人数量的配置文件。然后,您可以使用以下方法调用池:

parpool(profilename,poolsize)

其中profilename 是您为该池配置文件指定的名称。 poolsize 参数在这里是可选的,如果你不指定它,它将使用并行首选项下指定的默认工作器数量。

请注意,matlabpool 在 R2014a 中已删除,因此您不能再使用它来打开您的池。另一种可能是gcp,不过这个主要是获取当前池和那个池的参数。

备注:在尝试并行之前,请始终确保您的代码在 serial 中是最快的。并行计算不像你为了提高速度而挥舞的魔法,它是一种专门用于高效程序的工具,请参阅here

【讨论】:

  • 感谢您的回复我已经更改了线程数。并行计算工具箱首选项对我没有帮助。 Matlab 不想使用更多线程
  • 您使用的是哪个版本的 MATLAB?正如@AnonMe 所指出的,随着matlabpool 的移除,最多12 名工人被移除。因此,如果您使用 R2013b 或更旧的版本,您将无法使用更多的工作人员。
  • 我使用 Matlab R2013b。谢谢
【解决方案2】:

根据您的 Matlab 版本,可能是许可问题。对于旧版本,您需要 MATLAB 分布式计算服务器 (MDCS)。 R2014a 取消了对 12 名工作人员的限制。

【讨论】:

    【解决方案3】:

    MATLAB(和并行计算工具箱)默认情况下只考虑“真实”内核,而不考虑超线程内核。这是因为经验表明,在大多数情况下,这实际上可以提高性能。但是,您可以通过执行以下命令来覆盖 MATLAB 的默认选择:

    maxNumCompThreads(24)
    

    或者,对于 Parallel Computing Toolbox,您可以使用 Cluster Profile Manager 编辑您的 'local' 配置文件,并将工作人员数量设置为 24。

    编辑:刚刚注意到 OP 正在使用 R2013b。在这种情况下,您不能使用超过 12 名当地工人。升级到 R2014a 或更高版本将解决此问题。

    【讨论】:

    • 非常感谢。你的回答真的很有用。现在我明白了,我的 Matlab 版本不能使用更多的工人。所以,现在我可以开始 CUDA 部分了。 =)
    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多