Является ли функция matlab mex или общий объект/DLL быстрее?

Мне нужно сделать некоторые расчеты в Matlab. Он уже реализован в m-файле, но работает довольно медленно из-за большого количества циклов. Идея состоит в том, чтобы скомпилировать собственный код и использовать этот код в Matlab.

Теперь у меня есть две возможности:

  • Напишите общий объект (файл .so od .dll), который динамически загружается в Matlab.
  • Напишите функцию C(++)-MEX

В первом случае Matlab выполняет интерфейс к собственным типам данных и т. д., во втором случае мне приходится делать это самостоятельно. Теперь вопрос: что быстрее/лучше? Я могу делать и то, и другое, но я хочу набрать как можно больше скорости.

Спасибо


person Christian Wolf    schedule 13.12.2011    source источник
comment
Если вы не выполняете только тривиальное количество вычислений во внешнем коде, тогда не должно быть никакой разницы в производительности. Используйте то, что больше подходит для поставленной задачи.   -  person Paul R    schedule 13.12.2011


Ответы (1)


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

Однако использование MEX-файла, скорее всего, приведет к более прозрачному, удобочитаемому и удобному для сопровождения коду, поскольку функция будет выглядеть так, как если бы это была собственная команда MATLAB. Я думаю, что если производительность не является первоочередным требованием, то это соображение не менее важно, чем скорость.

person Sam Roberts    schedule 13.12.2011