首页 > 编程知识 正文

Matlab 将for循环转换为parfor循环,循环节转换为分数

时间:2023-05-06 07:45:49 阅读:282891 作者:4337

在某些情况下,必须修改代码以将for循环转换为parfor循环。这个示例展示了如何使用一个简单的嵌套for循环诊断和修复parfor循环问题。在MATLAB®中运行此代码并检查结果。

for x = 0:0.1:1 for k = 2:10 x(k) = x(k-1) + k; end xend

为了加速代码,尝试将for循环转换为parfor循环。注意这段代码会产生错误。

parfor x = 0:0.1:1 parfor k = 2:10 x(k) = x(k-1) + k; end xend

在这种情况下,您不能在不进行修改的情况下简单地将for循环转换为parfor循环。要使其工作,您必须在几个地方更改代码。要诊断问题,请在MATLAB编辑器中查找代码分析器消息。

要解决这些问题,必须修改代码以使用parfor。parfor循环的主体在并行池中使用多个MATLAB工作程序以不确定的顺序执行。因此,对于parfor循环体,你必须满足以下要求:

1)parfor循环的主体必须是独立的。一个循环的迭代不能依赖于前一个迭代,因为迭代是以不确定的顺序并行执行的。在这个例子中,

x(k) = x(k-1) + k;

不是独立的,因此不能使用parfor。有关处理独立性问题的后续步骤,请参见确保parfor循环迭代是独立的。

2)不能将一个parfor循环嵌套到另一个parfor循环中。该示例有两个嵌套的for循环,因此您只能用一个parfor循环替换一个for循环。相反,您可以在另一个parfor循环的主体中调用一个使用parfor循环的函数。但是,这种嵌套的parfor循环不会给您带来任何计算上的好处,因为所有的workers都用于并行化最外面的循环。有关处理嵌套循环的帮助,请参见嵌套语法分析和For循环以及其他语法分析要求。

3)parfor循环变量必须是连续递增的整数。在这个例子中,

parfor x = 0:0.1:1

具有非整数循环变量,因此在这里不能使用parfor。您可以通过将循环变量的值更改为算法所需的整数值来解决这个问题。有关对parfor-loop变量进行故障诊断的后续步骤,请参见确保parfor-loop变量是连续递增的整数。

4)不能像在for循环中那样,提前跳出parfor循环。不要在parfor循环的主体中包含return或break语句。没有通信,其他运行循环的MATLAB实例不知道何时停止。作为替代方案,可以考虑parfeval。

如果在将for循环转换为parfor循环时仍有问题,请参见对parfor循环中的变量进行故障诊断。

提示

您可以使用tic和toc对一个parfor循环进行配置,以测量与对应的for循环相比的加速速度。使用ticBytes和tocBytes来度量有多少数据被传输到并行池中的worker和从worker传输的数据。有关更多信息和示例,请参见分析parfor循环

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。