Будет ли автономный Matlab быстрее, чем Matlab из пользовательского интерфейса для длинного кода выполнения?

Я создал автономное приложение Matlab. Я ожидал, что это будет быстрее, чем запуск приложения из среды Matlab, но это действительно немного медленнее (1,3 сегмента на итерацию против 1,5 сегмента на итерацию). Я не считаю время инициализации, требуемое MCR, а выполнение моего кода. Это ожидаемая производительность или мне следует добиться улучшения производительности? Я не нашел никаких настроек в инструменте развертывания, которые помогли бы сократить время выполнения.

заранее спасибо


person Picarus    schedule 10.06.2013    source источник
comment
Несмотря на множество модных словечек, мало что можно найти об этом процессе строительства. У меня сложилось впечатление, что он в основном создает зашифрованные файлы pcode с некоторой оболочкой для их выполнения. Так что я бы сказал, что это ожидаемо. Похоже, что почти все переводят свои на правильный язык после разработки для скорости.   -  person bdecaf    schedule 10.06.2013


Ответы (1)


Приложения, созданные с помощью компилятора MATLAB, должны выполняться практически с той же скоростью, что и в MATLAB.

Компилятор MATLAB не преобразует ваш код MATLAB в машинный код так же, как компилятор C делает для C.Что он делает, так это архивирует и шифрует ваш код MATLAB (обратите внимание, он правильно шифрует его, а не просто pcodes, как предполагает комментарий ), создайте тонкую исполняемую оболочку и упакуйте их вместе, возможно, также с MATLAB Compiler Runtime (MCR). MCR очень похож на сам MATLAB, без графического пользовательского интерфейса и свободно распространяемый.

Когда вы запускаете исполняемый файл, он деархивирует и расшифровывает ваш код MATLAB и запускает его против MCR. Он должен работать точно так же, как с точки зрения результатов, так и с точки зрения скорости.

Очень старые версии MATLAB Compiler (до версии 4.0) работали по-другому, преобразовывая подмножество языка MATLAB в код C и компилируя его. Это обеспечило потенциально значительное ускорение, но поддерживалось только подмножество языка, и результаты, если вы не были осторожны, иногда могли быть другими. Аналогичная функциональность теперь доступна в отдельном продукте MATLAB Coder.

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

person Sam Roberts    schedule 10.06.2013
comment
Спасибо за исчерпывающий ответ. - person Picarus; 10.06.2013