matlab - 为什么 Matlab 2014a/b 中的 TreeBagger 只使用并行池中的几个 worker ?

标签 matlab parallel-processing distributed-computing random-forest

我将 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/

相关文章:

c++ - 并行程序与线性程序相比没有速度增加

python - Redis 或 Memcached 是否可以用于 "lock"资源,例如 S3 之类的 blobstore?

wcf - WCF 的所有可用替代品是什么?

matlab - ICA(独立分量分析)快速定点算法

matlab - 在 MatLab 中过滤噪声

python - Python 中的复杂集成

machine-learning - Julia:并行添加到多个数组

matlab - 从零点之间的现有矩阵创建一个新矩阵

python - 进度条使用 tqdm 和多进程将代码减慢 5 倍

Golang游分布式模式