为什么Matlab 2014a/b中的TreeBagger只使用并行池中的少数工作者?

Dyl*_*uir 5 parallel-processing matlab distributed-computing random-forest

我正在使用TreeBaggerMatlab(R2014a&b)提供的类,与分布式计算工具箱一起使用.我local在拥有40个内核的Windows 7计算机上运行了一个有30名工作人员的集群.

我调用TreeBagger构造函数来生成一个回归林(一个包含32个树的集合),传递一个set为的options结构.'UseParallel''always'

但是,TreeBagger似乎只使用了可用的30个左右的工作者(根据每个进程的CPU使用情况来判断,使用任务管理器观察).当我尝试使用简单的parfor循环测试池时:

parfor i=1:30
    a = fft(rand(20000));
end
Run Code Online (Sandbox Code Playgroud)

然后所有30名工人都参与其中.

我的问题是:(如何)我可以强制TreeBagger使用所有可用资源?

Mat*_*att 0

根据 TreeBagger 类的文档,所需的操作似乎是相当内存密集型的。如果不了解更多有关 Matlab 使用的内部调度系统的信息,调度程序认为将工作负载分配给更少的工作人员并为每个工作人员提供更多内存似乎是解决问题的最有效方法。

使用/可用的工作线程数量还可能取决于系统上的物理核心数量(与超线程核心数量不同),以及允许 Matlab 消耗的资源。

在 HPC 中,针对某些类型的问题,将内存密集型任务拆分为少于最大数量的工作人员是一种常见技术。