You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中如何分组CPU核心并行运行含parfor的函数

实现12核分组运行myfunc的MATLAB方案

由于无法修改myfunc内部结构,我们可以通过创建多个独立的并行池实现核心分组,让3个myfunc实例各占用4核,充分利用12核资源。具体方案如下:

步骤1:初始化集群与并行池

首先关闭现有并行池避免资源冲突,然后创建3个各含4个工作进程的独立并行池(总进程数12,匹配CPU核心数):

% 关闭已有并行池
if ~isempty(gcp('nocreate'))
    delete(gcp);
end

% 配置本地集群,设置总工作进程上限为12
cluster = parcluster('local');
cluster.NumWorkers = 12;

% 创建3个独立并行池,每个分配4核
pool1 = parpool(cluster, 4);
pool2 = parpool(cluster, 4);
pool3 = parpool(cluster, 4);

步骤2:提交myfunc并行任务

使用batch函数将3个myfunc实例分别绑定到对应的并行池,每个实例会自动使用绑定池的4核运行内部parfor:

% 提交任务到各自的并行池,0表示无输出参数(可根据实际需求调整)
job1 = batch(cluster, @myfunc, 0, {}, 'Pool', pool1);
job2 = batch(cluster, @myfunc, 0, {}, 'Pool', pool2);
job3 = batch(cluster, @myfunc, 0, {}, 'Pool', pool3);

步骤3:等待任务完成并清理资源

等待所有任务执行完毕后,关闭并行池释放资源:

% 等待所有任务结束
wait([job1, job2, job3]);

% 关闭所有并行池
delete([pool1, pool2, pool3]);

关键说明

  • 每个myfunc内部的parfor会自动使用其绑定的并行池资源,无需修改函数代码。
  • 确保MATLAB版本支持多并行池创建(R2019b及以上版本对多池支持更完善)。
  • 若myfunc需要输入参数,可将参数替换到batch函数的第三个空数组位置(例如{arg1, arg2})。

内容的提问来源于stack exchange,提问作者Barry G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:53:19