文档

展开循环

当代码生成器展开-循环,而不是生成-loop在生成的代码中,它为每次迭代生成循环体的副本。对于小而紧的循环,展开可以提高性能。然而,对于大型循环,展开会显著增加代码生成时间并生成低效的代码。

代码生成器使用启发式来确定何时展开循环。若要强制展开循环,使用coder.unroll.例如:

函数Z = call_myloop()% # codegenZ = myloop(5);结束函数B = myloop(n) B = 0 (1,n);coder.unroll ();I = 1:n b(I)= I +n;结束结束

下面是for循环生成的代码:

Z [0] = 6.0;Z [1] = 7.0;Z [2] = 8.0;Z [3] = 9.0;Z [4] = 10.0;

来控制-loop是展开的,使用coder.unroll国旗论点。例如,只在迭代次数小于10时展开循环。

函数Z = call_myloop()% # codegenZ = myloop(5);结束函数B = myloop(n) unroll_flag = n < 10;B = 0 (1,n);coder.unroll (unroll_flag);I = 1:n b(I)= I +n;结束结束

展开-循环时,代码生成器必须能够确定循环。例如,以下代码的代码生成失败,因为的值n在代码生成时不知道。

函数B = myloop(n) B = 0 (1,n);coder.unroll ();I = 1:n b(I)= I +n;结束结束

另请参阅

相关的话题

这个话题有帮助吗?