Использование coder.const с внешними вызовами функции

Можно использовать coder.const сворачивать вызов функции в константу в сгенерированном коде. Генератор кода оценивает вызов функции и заменяет его на результат оценки. Если вы делаете значение внешних параметров вызова функции, вызов функции оценен MATLAB® вместо генератором кода. Использование coder.const с внешним вызовом функции к:

  • Уменьшайте время генерации кода, особенно для сворачивания констант в вычислительном отношении интенсивных выражений.

  • Обеспечьте сворачивание констант когда coder.const неспособно к постоянному сгибу.

Чтобы сделать отдельное значение внешних параметров вызова функции, использовать feval. Чтобы выполнить все вызовы к конкретному функциональному значению внешних параметров, использовать coder.extrinsic.

Уменьшайте время генерации кода при помощи coder.const с feval

Рассмотрите эту функцию, которая сворачивает в вычислительном отношении интенсивное выражение besselj(3, zTable) в константу:

function j = fcn(z)
zTable = coder.const(0:0.01:100);
jTable = coder.const(besselj(3,zTable));
j = interp1(zTable,jTable,z);
end

Сделать генерацию кода fcn быстрее, оцените besselj(3, zTable) в MATLAB при помощи feval.

function j = fcn(z)
zTable = coder.const(0:0.01:100);
jTable = coder.const(feval('besselj',3,zTable));
j = interp1(zTable,jTable,z);
end

Обеспечьте сворачивание констант при помощи coder.const с feval

Рассмотрите эту функцию, которая сворачивает вызов функции rand(1,100) в константу.

function yi = fcn(xi)
y = coder.const(rand(1,100));
yi = interp1(y,xi);
end

Генерация кода заканчивается ошибкой.

codegen fcn -args {0} -config:lib -report
??? The input to coder.const cannot be reduced to a constant.

К успешно постоянному сгибу rand(1,100), оцените его в MATLAB при помощи feval.

function yi = fcn(xi)
y = coder.const(feval('rand',1,100));
yi = interp1(y,xi);
end

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

|

Похожие темы