MATLAB Compiler против MATLAB Coder

38

Какая разница между двумя?

Насколько я понимаю, MATLAB Compiler переносит код MATLAB в файл .exe, чтобы его можно было использовать без установки MATLAB и требуется только MCR. Кроме того, MATLAB Builder NE также может использоваться для создания сборников .Net, которые будут использоваться с .Net-каркасом вместо файла .exe, но они все еще требуют MCR.

Теперь я не понимаю, для чего использовался MATLAB Coder? Он генерирует код C/С++. Но действительно ли код MATLAB преобразуется в C/С++ или он просто упакован, как в случае с MATLAB Compiler? Нужно ли также запустить MCR?

Я понимаю, что это не совсем вопрос программирования. Но я искал в Интернете и до сих пор не нашел ясного ответа. Это очень дорогие продукты, поэтому я хотел бы знать, что я получаю.

  • 3
    Этот вопрос станет для пользователей прекрасной возможностью обновить и отредактировать теги вики для matlab-coder и matlab-compiler . Последний, кажется, является общим и специфическим для самого Matlab.
  • 1
    @horchler Хорошо, я отредактировал тег matlab-compiler. Они все еще немного лаконичны, но у меня нет ничего лучше.
Теги:
matlab-compiler
matlab-deployment
matlab-coder

3 ответа

58
Лучший ответ

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

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

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

MATLAB Coder преобразует подмножество языка MATLAB в код C. Это можно затем использовать по-разному, включая возвращение в MATLAB в виде файла mex, скомпилированного с помощью компилятора C для вызова из другого приложения или доставляемого на встроенное устройство. Поскольку код C, а не код MATLAB, он часто (хотя и не всегда) работает намного быстрее, чем исходный код MATLAB. Код C не требует MCR. Поддерживаемый подмножество языка MATLAB очень обширен, но есть несколько заметных ограничений, которые вы хотели бы изучить, прежде чем совершать этот рабочий процесс. Полученный код - это код C, хотя он может создавать оболочку С++, если вам нужно использовать компилятор С++, а не компилятор C.

Компилятор MATLAB предназначен для использования, который вы хотите просто и (справедливо) совместно использовать приложение MATLAB, написанное с кем-то, у которого нет копии MATLAB. Поскольку развернутый код .m зашифрован, его также можно использовать для совместного использования кода MATLAB при защите интеллектуальной собственности.

MATLAB Coder имеет другие варианты использования, такие как необходимость ускорения кода MATLAB путем преобразования в файл mex или необходимости создания кода C для другого приложения или встроенного устройства.

Если у вас есть более подробные вопросы, я бы рекомендовал вам просто вызвать MathWorks и спросить их.


Изменить: приведенная выше информация верна для версий MATLAB R2014b и ниже. По состоянию на MATLAB R2015a функциональность от MATLAB Compiler была ремиксирована с функциональностью из продуктов MATLAB Builder, а также появился новый продукт MATLAB Compiler SDK. > .

Как и в R2015a, Компилятор MATLAB работает так же, как описано выше (т.е. шифрует, архивирует и упаковывает, но не производит C), но теперь будет пакет как .exe и как Excel надстройка (.xla). До R2015a эта функциональность присутствовала в продукте MATLAB Builder EX для Excel.

Начиная с R2015a, Компилятор MATLAB больше не создает компоненты .dll. Эта функциональность была перенесена в новый продукт MATLAB Compiler SDK, который также включает в себя функции для создания сборников .NET и классов Java. До R2015a эта функциональность присутствовала в продуктах MATLAB Builder NE для .NET и MATLAB Builder JA для Java.

Другими словами:

В R2014b и ниже мы имели:

Компилятор MATLAB: создайте компоненты .exe и .dll

MATLAB Builder NE для .NET: создание сборников .NET

MATLAB Builder JA для Java: создание классов Java

MATLAB Builder EX для Microsoft Excel: создайте надстройки Excel.

В R2015a имеем:

Компилятор MATLAB: создавать .exe и надстройки Excel

MATLAB Compiler SDK: создать .dll, сборки .NET и классы Java.

Объем и возможности использования MATLAB Coder не изменились в этих версиях (хотя есть новые функции).


Изменить: Начиная с R2015b, MATLAB Compiler SDK также создает пакеты Python.


Дополнительная информация о различении MATLAB Coder и MATLAB Compiler для C/С++ можно найти здесь.

Таблица сравнения различных Продукты MATLAB для генерации кода.

  • 1
    Отличный ответ, и спасибо за редактирование R2015a!
  • 0
    @ Chetan Rawal, у вас есть какая-нибудь информация для новой версии 2016a? То, что у вас есть, уже достаточно, но мне просто интересно, выпустила ли в 2016 году какую-либо новую информацию.
Показать ещё 2 комментария
2

MATLAB Compiler SDK предоставляет общие библиотеки, которые работают с MATLAB Runtime (MCR). Он поддерживает большинство функций в MATLAB, включая графику, и защищает вашу интеллектуальную собственность, шифруя ваш код MATLAB.

MATLAB Coder, с другой стороны, обеспечивает читаемый и переносимый исходный код. Он поддерживает подмножество языка MATLAB, ориентированного на алгоритмы, выполняющие численные вычисления.

Эти ответы MATLAB более подробно описывают эти два подхода:

http://www.mathworks.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-integrate-my-matlab-applications-with-c-c

Например, MATLAB Compiler SDK может быть развернут только на платформах, поддерживающих MATLAB (Windows, Mac, Linux), тогда как MATLAB Coder генерирует код C, который может работать на любой платформе, поддерживающей C-код.

Кроме того, упакованный код из MATLAB Compiler SDK зашифрован для защиты IP, тогда как сгенерированный код C от MATLAB Coder может быть защищен таким же образом, как защищен написанный C-код.

Также стоит отметить, что сгенерированный код C от MATLAB Coder имеет потенциал более быстрого выполнения, тогда как упакованный код из MATLAB Compiler SDK будет работать так же быстро, как в MATLAB.

0

Я не эксперт, но Coder описывается как генерирующий автономный код C/С++, не упоминающий MCR. Однако я заметил, что он поддерживает только "подмножество" языка Matlab, о котором вы можете прочитать здесь здесь. Компилятор, похоже, только что упаковал ваш код Matlab, как вы предложили, поэтому, возможно, поддерживает большинство функций.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню