2016-09-02 2 views
1

Насколько я знаю, я могу запускать .mex-файлы в Linux, которые были сгенерированы в Windows, установив Matlab Runtime в Linux (исправьте меня, если я ошибаюсь). Но что, если я хочу использовать созданный Java-пакет MATLAB, который был создан в Windows, на Linux (например, Ubuntu)?Использование Java-пакета MATLAB (Windows) в Linux

Цель:

Я должен проверить функцию, которая использует обработку звука. Если тест будет успешным, мы купим нужные нам продукты. На данный момент у меня есть запрошенная лицензия на Windows, так как запрошенная лицензия имеет ограничение на машину, я могу сгенерировать некоторый тестовый Java-код на моей машине с Windows, теперь приложение будет развернуто на android, поэтому я узнал из Google, что для запуска или компилятора для использования преобразованного/сгенерированного кода требуется время выполнения matlab. В системе Android нет поддержки MCR или простой поддержки установки Matlab Runtime, поэтому я перешел к этому решению.

Используйте linux для размещения сервлета, который принимает некоторые данные от android, обрабатывает ответ возврата в терминах json или текста. Теперь мой пакет java создается с помощью Windows-машины, и я потерян.

Насколько мне известно, этот подход с использованием кода-конверта-сервлета-развертывания-один является экономически эффективным, чем MATLAB Production Server, поскольку мы должны покупать лицензию один раз для конкретных продуктов. Помните, что этап лицензирования - это после того, как мы проверим, дает ли этот подход желаемые результаты.

Характеристики:

  • для Windows 10

  • MATLAB 2016a (Trial)

  • MATLAB продукты (Компилятор/SDK, обработка сигналов/аудио Processing Toolbox)

  • Пакет, изготовленный с использованием JDK 1.7.x (точно соответствующий MATLAB jdk/jre ver Sion на Windows)

  • Ubuntu 16 Desktop (с Oracle JDK 8_101 установлен, установлен также MATLAB выполнения, я также могу работать с JDK 7.x (так же, как MATLAB используется в Windows, при создании пакета))

Вопросы:

  • Как я могу использовать этот пакет Java в Linux, когда я создаю программу Java?

  • Какое программное обеспечение + лицензии необходимы, чтобы сделать это возможным?

  • Должен ли я установить машину MATLAB на Linux, сгенерировать Java-пакет на Linux-машине и использовать этот пакет в программе Java на той же машине Linux? (Я думаю, мне нужно будет запросить лицензию для него снова)

  • Есть ли другие методы? Я что-то упускаю?

ответ

3

Java пакеты, сгенерированные MATLAB Compiler SDK находятся в общем кросс-платформенной - однако, они могут позвонить mex файлы или другие библиотеки, которые являются конкретной платформы, и если они делают пакет Java в целом будет в конечном итоге, зависит от платформы.

Вы не совсем поняли, звоните ли вы mex или нет; и вы можете вызывать библиотеки, специфичные для платформы, не осознавая этого (например, Signal Processing Toolbox может вызывать некоторую библиотеку для некоторых своих операций).

Кроме того, ваш комментарий о том, «возможности запускать mex файлов на Linux, которые были произведены на Windows, путем установки MATLAB выполнения на Linux» путаются - mex файлы не являются кросс-платформенными, и не использовать MATLAB Runtime на всех.

Так что в отношении платформ вы можете использовать Java-пакет, сгенерированный в Windows на Linux, до тех пор, пока он не вызывает никаких файлов или библиотек Windows mex. Но если вы создадите его в Linux, вы можете исключить эту проблему, поэтому вам будет легче, если вы используете ту же платформу для компиляции и исполнения. Для вас достаточно легко переназначить вашу лицензию MATLAB на машину Linux, чтобы сделать это.

Я что-то не хватает?

Да: способ, которым вы предлагаете делать вещи, вряд ли будет хорошо масштабироваться. Если у вас есть сервлет Java на вашем Linux-сервере вместе с Java-пакетом, сгенерированным MATLAB Compiler SDK, тогда всякий раз, когда вы совершаете вызов сервлета, он делает вызов пакета Java, который запустит MATLAB Compiler Runtime (MCR), запустите код MATLAB, верните ответ на сервлет и затем выключите MCR.

MCR занимает довольно много времени (почти до тех пор, пока MATLAB). Поэтому каждый вызов займет довольно много времени, только из-за времени запуска MCR.

Итак, вы можете обойти это, создав какой-то утилитный инструмент, который запустит MCR и сохранит его там, и передаст запросы и вернет ответы на сервлет.

Но тогда у вас есть только один MCR - что произойдет, если вы сразу получите несколько запросов? Они будут поставлены в очередь (или отброшены), и они не будут масштабироваться. Таким образом, вам нужно будет улучшить свой служебный инструмент, чтобы он управлял пулом MCR и передавал запросы на бесплатный, балансируя по мере их загрузки.

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

И вам понадобится дополнительный материал, который позволит вам администрировать все это.

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

+0

Позволяет мне помешать смешению в сторону, когда я упаковываю, он автоматически обнаруживает зависимые файлы, и я предполагаю, что он включает их в пакет. Итак, если у меня есть MCR в Linux, я смогу использовать их в своем приложении java, например сервлетах? И тогда мне придется писать MATLAB PS, что, очевидно, я нет. – Talha

+1

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

Смежные вопросы