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
相关产品推荐
相关产品推荐

