【问题标题】:can't use all 8 cores in core i7 for matlab无法将核心 i7 中的所有 8 个核心用于 matlab
【发布时间】:2017-05-27 10:59:48
【问题描述】:

当我执行时

matlabpool open 4;

一切正常,但是当我尝试执行时

matlabpool open 8;

错误立即发生。我读到了超线程,我知道 8 个内核中有 4 个是虚拟的。这是否意味着我不能以有效的方式使用所有 8 个内核来实现

parfor loop 

在 Matlab 中?

例如,我有 8 个类似的独立任务。

我可以在 python 或 C#/C++ 中使用所有 8 个内核,加速速度提高 8 倍吗?

【问题讨论】:

  • 什么错误?显示它
  • 我记不太清了,但在 4 核机器上执行 matlabpool open 8; 时似乎出错了。主要问题是“我能否在 Matlab 中有效地使用所有 8 个内核(4 + 4 个虚拟)”
  • 不记得了,但是类似这样的错误 使用 matlabpool 的错误(第 148 行)无法启动并行池。 (有关导致错误的信息,请在集群配置文件管理器中验证配置文件“本地”。)原因:使用 parallel.internal.pool.InteractiveClient/start 时出错(第 326 行)无法启动池。使用 parallel.Job/submit 时出错(第 304 行)您请求至少 8 个工作人员,但集群“本地”的 NumWorkers 属性设置为最多允许 4 个工作人员。

标签: multithreading matlab matlabpool


【解决方案1】:

默认情况下,MATLAB 使用物理内核的数量而不是您机器上的超线程内核的数量,因为超线程最终仍然共享相同的物理 CPU 资源。在MATLAB Answers 上的这篇文章中,有更多关于使用超线程可能/可能没有好处的特定情况的信息

如果你想使用 8 个 worker,你需要修改 'local' 配置的 NumWorkers 属性

cluster = parcluster('local');
cluster.NumWorkers = 8;
saveProfile(cluster);

或者,您可以设置与maxNumCompThreads 一起使用的最大计算线程数

maxNumCompThreads(8)

【讨论】:

  • 谢谢,但是这样的过程会加速独立的类似过程吗?不幸的是,我现在还没有核心 i7,但是当我在核心 i5 中使用您的代码来获得 12 个工人(只有 4 个核心!)时,我无法获得加速。您的代码会获得真正的 8 倍加速而不是 4 倍加速吗?
  • @Qwer 正如链接答案中所述,这在很大程度上取决于问题,但对于密集型任务,使用超线程可能不会看到任何改进。
  • @Qwer 如果这对您有用,请考虑将其标记为解决方案
  • 它奏效了,但我在使用 8 名工人而不是 4 名工人时没有实现任何加速。
  • @Qwer 是的,这对于某些用例来说是可以预期的。您是否查看了我在答案中提供的详细讨论此问题的链接?至于“将其标记为解决方案”,它利用超线程进行计算的解决方案。仅仅因为你没有得到加速(你不会使用 any 方法得到加速)并不意味着它不是一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2014-11-25
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多