我将 Matlab (R2014a&b) 提供的 TreeBagger
类与分布式计算工具箱结合使用。我有一个 local
集群在一台有 40 个内核的 Windows 7 机器上运行,有 30 个工作人员。
我调用 TreeBagger
构造函数生成一个回归森林(一个包含 32 棵树的集合),传递一个带有 'UseParallel'
的 options
结构设置为 'always'
。
但是,TreeBagger
似乎只使用了 30 个可用的 worker 中的 8 个左右(根据每个进程的 CPU 使用率判断,使用任务管理器观察)。当我尝试使用简单的 parfor
循环测试池时:
parfor i=1:30
a = fft(rand(20000));
end
然后所有 30 个 worker 都参与。
我的问题是:
(如何)我可以强制 TreeBagger
使用所有可用资源?
最佳答案
根据 TreeBagger 类的文档,所需的操作似乎非常占用内存。在不了解 Matlab 使用的内部调度系统的更多信息的情况下,调度程序认为将工作负载分配给更少的工作人员并为每个工作人员提供更多内存似乎是解决问题的最有效方法。
使用/可用的 worker 数量还可能取决于系统上物理内核的数量(不同于超线程内核的数量),以及 Matlab 允许消耗的资源。
将内存密集型任务分配给少于最大数量的工作器是 HPC 中解决某些类型问题的常用技术。
关于matlab - 为什么 Matlab 2014a/b 中的 TreeBagger 只使用并行池中的几个 worker ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297206/