我在一台计算机上处理大约2,500,000张图像。我目前按顺序运行一个输入图像,用于单个输出到我的函数(计算需要大约5秒)。这显然需要太多时间。我可以采用哪些其他方法来加快这一过程?我想过启动MATLAB的多个实例并在数据子集上运行每个实例,但我不确定我是否真的实现了这种方法的并行性。什么是提高整体速度的更好方法?
答案 0 :(得分:0)
由于没有人似乎在帮忙,我想我会尝试一下,看看能否让你开始进行一些并行化。我不使用Windows或Matlab,因此可能需要进行一些修正......所以,如果有人知道更好......请随时做出贡献。
你可以在Windows下的Cygwin下安装GNU Parallel - 如果你谷歌的话,有很多教程和博客描述这个过程。
首先,我猜/希望以下命令将从命令行处理一个这样的图像,所以做一个小实验,看看在你进入下一步之前它是否会起作用
matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m image.jpg');exit;"
然后,要并行运行,您需要生成所有2,500,000个JPEG的列表,这样看起来就像这样
DIR /B /S | FINDSTR /I "*JPG$"
你需要将它提供给GNU Parallel,就像这样
DIR /B /S | FINDSTR /I "*JPG$" | parallel matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {}');exit;"
显然,在虚拟目录中使用一些文件的副本对此进行测试,以免被破坏或覆盖。
正如@Daniel建议的那样,启动Matlab会有开销,所以更改代码以处理作为参数提供的所有图像可能会更好,那么也许你可以将2-8个图像传递给Matlab的每个调用,类似于每个Matlab工作4个图像:
DIR /B /S | FINDSTR /I "*JPG$" | parallel -N 4 matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {1} {2} {3} {4}');exit;"