Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在Matlab中利用并行处理

我正在基于时间序列的计算。计算的每个迭代都是独立的。谁能分享一些在Matlab中利用并行处理的技巧/在线入门?如何在实际代码中指定?



回答:

由于您可以使用Parallel工具箱,因此建议您首先检查是否可以通过简单的方法进行操作。

基本上,不是写

for i=1:lots out(:,i)=do(something); end 你写

parfor i=1:lots out(:,i)=do(something); end 然后,您使用matlabpool创建多个工作程序(使用工具箱的本地计算机上最多可以有8个工作程序,如果您还具有Distributed Computing Server许可证,则在远程群集上最多可以有8个工作程序),然后运行代码,当您的迭代由8个内核而不是1个内核运行时,可以看到不错的速度提升。

即使parfor路由最简单,也可能无法立即使用,因为您可能会错误地建立索引,或者您可能以有问题的方式引用数组等。在编辑器中查看mlint警告,请阅读文档,并依靠良好的旧尝试和错误,您应该尽快找到答案。如果您有嵌套循环,通常最好只并行最内层的循环,并确保进行大量的迭代-这不仅是好的设计,而且还减少了可能给您带来麻烦的代码量。

请注意,尤其是如果您在本地计算机上运行代码,则可能会遇到内存问题(由于正在分页,因此可能会在并行模式下以非常慢的速度执行):每个工作人员都会获得工作空间的副本,因此如果计算涉及创建一个500MB的阵列,则8个工作人员将需要总共4GB的RAM-然后您甚至还没有开始计算父进程的RAM!此外,最好只在计算机上使用N-1个内核,这样,计算机上可能仍在运行其他进程(例如强制性防病毒...),剩下一个内核。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:31


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.