Matlab: многократный вызов одной и той же функции mex из цикла приводит к чрезмерным накладным расходам?

У меня есть код Matlab, который нужно ускорить. Благодаря профилированию я определил конкретную функцию как виновника в замедлении выполнения. Эта функция вызывается сотни тысяч раз внутри цикла.

Моей первой мыслью было преобразовать функцию в mex (используя Matlab Coder), чтобы ускорить ее. Однако здравый смысл программирования говорит мне, что интерфейс между Matlab и mex-кодом может привести к некоторым издержкам, что означает, что тысячи раз вызывать эту mex-функцию может быть плохой идеей. Это верно? Или Matlab совершает какое-то волшебство, когда тот же самый мекс вызывается несколько раз, чтобы убрать накладные расходы?

Если здесьявляется значительные затраты, я думаю о реструктуризации кода, чтобы добавить цикл к самой функции итогда создавая мекс этого. Прежде чем сделать это, я хотел бы подтвердить мое предположение, чтобы оправдать время, потраченное на это.

Обновить:

Я попробовал предложение @ angainor и создал donothing.m со следующим кодом:

function nothing = donothing(dummy) %#codegen
nothing = dummy;
end

Затем я создал mex-функцию из этого как donothing_mex и попробовал следующий код:

tic;
for i=1:1000000
    donothing_mex(5);
end
toc;

В результате миллион вызовов этой функции занял около 9 секунд. Это не является значительным расходом для наших целей, поэтому на данный момент я думаю, что преобразую только вызываемую функцию в mex. Тем не менее, вызов функции из цикла, который выполняется около миллиона раз, в ретроспективе кажется довольно глупой идеей, учитывая, что это критичный для производительности код, поэтому перемещение цикла к функции mex все еще в книгах, но с гораздо меньшим приоритетом.

Ответы на вопрос(3)

Ваш ответ на вопрос