Как оптимизировать циклы MATLAB? - PullRequest
4 голосов
/ 01 марта 2010

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

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

Есть ли другие предложения? Даже другие языки (python?), Которые имеют относительно безболезненные матричные инструменты, являются опцией.

Ответы [ 5 ]

4 голосов
/ 01 марта 2010

Когда-то было правдой, что векторизация улучшит скорость вашего кода MATLAB. Тем не менее, это в значительной степени уже не так с JIT-ускорителем

Это видео, демонстрирующее профилировщик MATLAB , может помочь.

4 голосов
/ 01 марта 2010

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

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/profile.html

http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_env/f9-17018.html

3 голосов
/ 04 марта 2010

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

3 голосов
/ 02 марта 2010

Если у вас есть выбор, обязательно настройте свои циклы, чтобы вы сканировали данные по столбцам, как это устроено в MATLAB. Кроме того, обязательно предварительно выделите все выходные массивы перед циклом и внесите в них индекс, а не увеличивайте массив внутри цикла for.

3 голосов
/ 02 марта 2010

Возможно, вы захотите изучить пакет инструментов параллельных вычислений MATLAB, который может иметь большое значение, если у вас есть подходящее оборудование. Я переписал около 12 строк кода и ускорился в 4-6 раз для одной из наших программ с интенсивным циклом на восьмиъядерном ПК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...