Разверните for- Циклы и parfor- Циклы

Когда генератор кода разворачивает a for- цикл или parfor- цикл, вместо того, чтобы произвести цикл в сгенерированном коде, это производит копию тела цикла для каждой итерации. Для маленьких, жестких циклов разворачивание может улучшать производительность. Однако для больших циклов, разворачивание может значительно увеличить время генерации кода и сгенерировать неэффективный код.

Обеспечьте for- Развертывание цикла при помощи coder.unroll

Генератор кода использует эвристику, чтобы определить, когда развернуть a for- цикл. Чтобы обеспечить развертывание цикла, использовать coder.unroll. Это влияет только for цикл, который сразу является после coder.unroll. Например:

function z = call_myloop()
%#codegen
z = myloop(5);
end

function b = myloop(n)
b = zeros(1,n);
coder.unroll();
for i = 1:n
    b(i)=i+n;
end
end

Вот сгенерированный код для цикла for:

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

Управлять когда a for- цикл развернут, используйте coder.unroll flag аргумент. Например, разверните цикл только, когда количество итераций будет меньше 10.

function z = call_myloop()
%#codegen
z = myloop(5);
end

function b = myloop(n)
unroll_flag = n < 10;
b = zeros(1,n);
coder.unroll(unroll_flag);
for i = 1:n
    b(i)=i+n;
end
end

Разворачивать a for- цикл, генератор кода должен смочь определить границы for- цикл. Например, генерация кода перестала работать для следующего кода потому что значение n не известен во время генерации кода.

function b = myloop(n)
b = zeros(1,n);
coder.unroll();
for i = 1:n
    b(i)=i+n;
end
end

Смотрите также

Похожие темы