我有一台笔记本电脑正在Ubuntu
运行Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
。根据Intel
上述处理器的网站(位于此处),该处理器有两个内核,一次可以并行运行 4 个线程(因为虽然它有 2 个物理内核,但它有 4 个逻辑内核)。
当我开始时matlabpool
,它从local
配置开始,并说它已连接到 2 个实验室。我想这意味着它可以并行运行 2 个线程。难道不知道CPU实际上可以并行运行4个线程吗?
我有一台笔记本电脑正在Ubuntu
运行Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
。根据Intel
上述处理器的网站(位于此处),该处理器有两个内核,一次可以并行运行 4 个线程(因为虽然它有 2 个物理内核,但它有 4 个逻辑内核)。
当我开始时matlabpool
,它从local
配置开始,并说它已连接到 2 个实验室。我想这意味着它可以并行运行 2 个线程。难道不知道CPU实际上可以并行运行4个线程吗?
根据我的经验,默认情况下,local
配置matlabpool
使用机器拥有的物理内核数,而不是逻辑内核数。因此,在您的机器上,matlabpool
仅连接到两个实验室。
但是,这只是一个设置,可以使用以下命令覆盖:
matlabpool poolsize n
其中n
是 1 到 12 之间的整数,表示您希望 Matlab 使用的实验室数量。
现在我们来看看有趣的一点,感谢@RodyOldenhuis 在评论中的快速课程,我可以更好地回答。
超线程意味着给定的物理内核可以同时有两个线程运行。当然,它们不能从字面上同时处理。这个想法更像这样:如果其中一个线程在将任务分配给核心时效率低下,那么核心可能会出现一些“停机时间”。第二个线程可以利用这个“停机时间”来完成一些工作。
根据我的经验,Matlab 在将线程分配给内核时通常很有效,因此,如果有一个 Matlab 线程(即一个实验室)通过它,内核可能只有很少的“停机时间”,因此对内核的优势很小。超线程。我的台式机是 core-i7,有 4 个物理核心,但有 8 个逻辑核心。parfor
但是,我注意到运行具有 4 个实验室和 8 个实验室的循环之间几乎没有区别。事实上,由于与初始化额外实验室相关的启动成本,8 个实验室通常会更慢。
当然,这可能会因其他外部因素而变得复杂,例如您可能同时向 Matlab 运行的其他程序。
总之,我的怀疑是,即使你可以强制 Matlab 初始化 4 个实验室(甚至 12 个实验室),你也不会看到超过 2 个实验室的加速,因为 Matlab 通常在将任务分配给处理器。