Edu*_*das 9 parallel-processing matlab
我正在研究基于时间序列的计算.每次迭代计算都是独立的.有人可以在Matlab中使用并行处理分享一些提示/在线引子吗?如何在实际代码中指定?
Jon*_*nas 12
由于您可以访问Parallel工具箱,我建议您先检查一下是否可以轻松完成.
基本上,而不是写作
for i=1:lots
out(:,i)=do(something);
end
Run Code Online (Sandbox Code Playgroud)
你写
parfor i=1:lots
out(:,i)=do(something);
end
Run Code Online (Sandbox Code Playgroud)
然后,您将使用matlabpool创建许多工作程序(如果您还拥有Distributed Computing Server许可证,则本地计算机上最多可以使用工具箱,并且远程群集上最多可以使用数量),并运行代码,当您的迭代由8个核心而不是1个核心运行时,可以看到很好的速度增益.
尽管parfor路由是最简单的,但它可能无法正常工作,因为您可能会错误地建立索引,或者您可能以有问题的方式引用数组等.在编辑器中查看mlint警告,阅读文档,并依靠良好的旧试验和错误,你应该相当快地找出它.如果你有嵌套循环,它通常最好只并行化最里面的循环,并确保它进行大量的迭代 - 这不仅是好的设计,它还减少了可能给你带来麻烦的代码量.
请注意,特别是如果您在本地计算机上运行代码,您可能会遇到内存问题(这可能表现为并行模式执行速度非常慢,因为您正在分页):每个工作人员都会获得工作区的副本,因此如果您的计算涉及创建500MB阵列,8名工作人员将需要总共4GB的RAM - 然后你甚至还没有开始计算父进程的RAM!此外,在您的计算机上仅使用N-1核心可能会很好,因此仍有一个核心可用于计算机上可能运行的其他进程(例如强制性防病毒......).
Mathworks提供自己的并行计算工具箱.如果您不想购买,有一些选择
编辑:添加链接并行MATLAB与openmp mex文件
我只试过第一次.