multithreading - Matlabpool 线程数与核心数

标签 multithreading matlab multicore

我有一台笔记本电脑在 Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz 上运行 Ubuntu。根据上述处理器的 Intel 网站(位于 here ),该处理器有两个内核,可以同时并行运行 4 个线程(因为虽然它有 2 个物理内核,但它有 4 个逻辑内核).

当我启动 matlabpool 时,它从 local 配置开始,并说它已连接到 2 个实验室。我想这意味着它可以并行运行 2 个线程。难道它不知道CPU其实可以并行运行4个线程吗?

最佳答案

根据我的经验,matlabpoollocal 配置默认使用机器拥有的物理内核数,而不是逻辑内核数。因此在您的机器上,matlabpool 仅连接到两个实验室。

然而,这只是一个设置,可以用下面的命令覆盖:

matlabpool poolsize n

其中 n 是 1 到 12 之间的整数,表示您希望 Matlab 使用的实验室数量。

现在我们谈到了有趣的一点,由于@RodyOldenhuis 在评论中的快速教训,我可以更好地回答这个问题。

超线程意味着给定的物理内核可以同时运行两个线程。当然,它们不能从字面上同时处理。这个想法更像是这样:如果其中一个线程在将任务分配给核心时效率低下,那么核心可能会出现一些“停机时间”。第二个线程可以利用这个“停机时间”来完成一些工作。

根据我的经验,Matlab 在将线程分配给内核时通常是高效的,因此在一个 Matlab 线程(即一个实验室)运行时,一个内核可能只有很少的“停机时间”,因此会有很多超线程的优势不大。我的台式机是 core-i7,具有 4 个物理内核和 8 个逻辑内核。但是,我注意到使用 4 个实验室和 8 个实验室运行 parfor 循环之间的区别很小。事实上,由于与初始化额外实验室相关的启动成本,8 个实验室通常速度较慢。

当然,这可能会因其他外部因素而变得复杂,例如您可能同时在 Matlab 上运行的其他程序。

总而言之,我怀疑即使您可以强制 Matlab 初始化 4 个实验室(甚至 12 个实验室),您也不会看到超过 2 个实验室的加速,因为 Matlab 通常在分配时相当有效任务交给处理器。

关于multithreading - Matlabpool 线程数与核心数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14468886/

相关文章:

.net - console.writeline 线程安全吗?

c++ - 一个套接字在线程中发送/接收

multithreading - 使用 atomic_init 而不是 atomic_store 有什么优势吗?

用于设置核心亲和性的 C++ 风格?

c - 时钟振荡器是否在多核处理器的内核之间共享?

c# - 如何在 C# 中处理/杀死锁定的线程

multithreading - DispatchQueue.main.async 不返回主线程 - SwiftUI

matlab - 如何直接计算所需的信号相移?

Matlab 生成所有可能的团队组合

matlab - 如何关闭发生错误后仍处于打开状态的文件?