Может ли кто-нибудь, у кого есть доступ к новому продукту "Matlab Coder", показать вывод перевода на C?

Matlab Coder - недавно выпущенный продукт MathWorks. Я понимаю, что это компилятор Matlab-to-C с наибольшим преимуществом по сравнению с предыдущими решениями, заключающийся в том, что результирующая программа не должна быть связана с разделяемой библиотекой Matlab.

Может ли кто-нибудь, у кого доступ к этому продукту, подтвердить это? Каковы зависимости переведенных программ и от какой производительности мы говорим? Также мне бы хотелось увидеть некоторые примеры выводов, чтобы узнать, могут ли быть поняты и улучшены результирующие C-программы без доступа к источнику Matlab.

Если все сделано правильно, это может быть очень мощным, что позволяет быстро прототипировать в Matlab и мгновенное преобразование в C, когда ситуация становится серьезной. Я вроде как это плохо работает, так что Python + Numpy + Scipy.weave по-прежнему превосходит ^^.

Ответ 1

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

RE: использование BLAS для матричного умножения - в то время как сгенерированный код C автоматически не включает в себя какие-либо оптимизации с процессором/платформой, есть функция, называемая Target Function Library, которая позволяет пользователям писать собственную реализацию примитивных операций (таких как матричное умножение) и включать их в сгенерированный код. Вы можете подключить библиотеки BLAS к MATLAB Coder с помощью этого метода. Theres также возможность включать оптимизированные вызовы для конкретных процессоров для более крупных функций с помощью специальной интеграции кода и условной компиляции, которая позволяет указать один набор кода для использования для генерации кода и другой набор для моделирования (например, оптимизированная функция FIR для Техаса Instruments DSP и функционально эквивалентный код для моделирования, который может выполняться на вашем ПК, написанном на C или в MATLAB).

Надеюсь, что это полезно - Арвинд Анантан; Менеджер продуктов для MATLAB Coder; MathWorks

Ответ 2

Я использую Matlab Coder с Real Time Workshop (RTW), чтобы генерировать собственный стандартный код C.

Прежде всего вас попросят использовать подмножество Matlab под названием "Embedded Matlab", вы можете найти документ об этом в Интернете

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

Созданный код может быть беспорядочным, но он работает. вы не должны пытаться это понять. Определенно, так же, как вы пытаетесь понять ассемблер, который ваш компилятор генерирует из написанного вами C-кода, совершенно бессмысленно.

Еще одна вещь, о которой вам следует позаботиться, - объявить постоянные большие типы данных (векторы, большие arryes и т.д.), иначе они будут выделены в ваш стек...

Удачи!