Использовать 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

См. также

|

Похожие темы