【发布时间】:2023-03-27 03:50:01
【问题描述】:
我刚买了 Matlab 并行计算工具箱。
命令matlabpool open 使用我的 CPU 中的内核数打开并行工作器。
但我的每个 CPU 内核都有两个线程。根据Windows任务管理器,每个worker只能使用一个CPU核的一半性能,这似乎可以解释为一个worker =一个线程=“半核”。
因此,在所有worker开启后,仍然可以使用CPU总功率的一半。
有没有其他命令可以帮助解决这个问题?
【问题讨论】:
-
我很确定你的 CPU 有超过 4 个线程。即使是一个微控制器(带有基本的 RTOS)也可以处理十几个线程。但是,如果您的计算是 CPU 密集型的,则生成大量线程不会提高处理速度。
-
这里提到you can specify the amount of workers,虽然我不确定你是否能超过你目前的金额。如果一切都失败了,您可以随时考虑use multiple matlab sessions。
-
澄清一下,我怀疑您所说的是充分利用超线程处理单元。这个问题之前已经出现过,我已经提供了一个答案at this link,所以我将此问题标记为重复并投票结束。请让我知道(在这个评论线程中)如果你真的问的是不同的东西。
-
确切地说,
matlabpool启动后台进程而不是线程(它们使用 MPI 在每个进程之间进行通信)。 MATLAB 计算引擎(如果你愿意的话是内核)的核心实际上是单线程的,尽管 IDE 和其他各种东西在单独的线程(Java 前端)中运行。然而,许多内置数学函数具有多线程实现,但由于 Intel MKL、FFTW 等库,这些函数在 MATLAB 之外真正实现了并行化。
标签: multithreading parallel-processing matlab