Matlab R2016a打包独立应用后parfor循环无并行加速问题求助
Matlab R2016a 打包独立应用后parfor并行失效解决思路
- 强制显式加载集群配置文件
不要依赖部署环境的默认配置搜索逻辑,在代码parfor执行前的初始化阶段添加如下逻辑:if isdeployed % 仅在部署模式下执行 % 优先读取同目录下的集群配置文件,打包时记得把.settings文件放入同目录 profile_path = fullfile(pwd, 'your_cluster_profile.settings'); parallel.importProfile(profile_path); % 按需启动并行池,避免重复启动报错 if isempty(gcp('nocreate')) parpool('your_cluster_profile_name', 4); % 第二个参数为指定调用的核心数 end end - 打包时显式声明并行依赖
- 若使用mcc命令打包,需添加
-a参数手动包含.settings集群配置文件,同时添加-p参数指定Parallel Computing Toolbox依赖:mcc -m your_app.fig -a your_cluster_profile.settings -p parallel - 若使用GUIDE自带的打包工具,在「附加文件」栏手动添加你的.settings配置文件,在「运行时包含项」中勾选Parallel Computing Toolbox运行组件,R2016a版本该选项默认不会自动识别勾选。
- 若使用mcc命令打包,需添加
- 开启部署环境并行隐藏开关
R2016a的MCR运行时默认会限制部署应用的并行权限,在代码入口最开头添加如下配置:coder.extrinsic('parpool'); setappdata(0, 'MCR_PARALLEL_ALLOW', true); - 验证并行状态排除异常
打包测试阶段可添加日志输出,打印gcp('nocreate')的返回值,若返回为空说明并行池启动失败,可优先排查路径问题:部署后需保证.settings文件和exe应用处于同一目录,不要在代码中写死开发环境的绝对路径。 - 调整并行池超时配置
部署环境下并行池启动耗时比原生Matlab环境高2~3倍,可在启动parpool后设置空闲超时时间,避免parfor还未执行并行池就自动关闭:set(gcp, 'IdleTimeout', 120);
内容的提问来源于stack exchange,提问作者Belkacem
相关产品推荐
相关产品推荐

