2010-03-01 3 views
4

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

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

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

+0

Отображение кода и выделение медленных бит действительно помогут. Есть много доступных методов, о которых нельзя говорить в общих советах. В идеале мы могли бы просто скопировать и вставить ваш код, чтобы увидеть его работу без необходимости в файлах данных и т. Д. – MatlabDoug

ответ

4

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

Это может помочь video demonstrating the MATLAB profiler.

+1

«В большой степени» здесь очень важно :-) – AVB

+0

Я знаю, что использовал профилировщик ... это было бы полезным дополнением к моему первоначальному вопросу :) Тем не менее, особое поведение ускорителя JIT нова для меня. Похоже, что Mathworks скрыл свое поведение от пользователей. Спасибо за ссылку в любом случае, пожалуйста, дайте мне знать, если у вас есть другие предложения. – user262063

+0

Ссылка «JIT-accelerator» мертва, есть ли другая ссылка на эту статью? –

4

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

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

3

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

3

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

+0

Yup. Векторизация может помочь производительности! – paradox

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