Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我正在基于时间序列的计算。计算的每个迭代都是独立的。谁能分享一些在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个内核,这样,计算机上可能仍在运行其他进程(例如强制性防病毒...),剩下一个内核。 更多&回答... |
![]() |
![]() |