Matlab并行计算实践
需要对上万张图像进行OCR识别。OCR算法原型用Matlab脚本实现,对每张图逐行逐字符识别,整体计算时间很长。找多核多CPU并行执行的方案
Matlab有并行工具箱。可以使用parfor对循环进行并行处理,parfor要求循环之间的运算独立不相关;另一种方式用SPMD模式,类似多线程/多进程方式,每个后台计算单位(worker)都有唯一标识(labindex),类似OpenMP里的线程id或是MPI里的rank, 同时可以获取worker数量(numlabs), 对多数应用,通过{labindex,numlabs}信息即可对整体计算进行任务划分,每个worker对应一个任务,所有任务完成后,可将计算结果进行合并,最终获取最后结果。SPMD模式还可以支持worker之间的信息交换,暂时没有用到
Matlab中用parpool命令启动worker池环境! 命令细节查看parpool文档
逻辑示意
有nPNG张图片,放在工作目录下,需要对每张图片进行单独OCR识别,结果写到文本文件内,图片识别顺序不重要。文章来源:https://www.toymoban.com/news/detail-795095.html
%.... 初始化...
%获取所有png图片列表
pngs =dir(strcat(imgDir,'\*.png');
nPng=length(pngs);
spmd
%worker的rank
labindex
%outfile,fp都是worker私有的
outfile=['spmd.dir/outfile.txt' num2str(labindex,'%02d')];
fp=fopen(outfile,'wt+');
%依据labindex,numlabs对数据集进行worker之间任务划分
for i=labindex:numlabs:nPng
png=strcat(pngs(i).folder, '\', pngs(i).name);
%...图像前处理...
ocr(png,fp,...);
end
fclose(fp);
end
%.....收尾汇总....
资料
Matlab并行计算
并行计算官方文档
Tutorial: Using MATLAB PCT and Parallel Server in Red Cloud文章来源地址https://www.toymoban.com/news/detail-795095.html
到了这里,关于Matlab并行计算实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!