Как ускорить выполнение программы Matlab?
Существуют ли методы, позволяющие ускорить выполнение кода MATLAB?
Я говорю о вещах, которые могут сделать мой компьютер быстрее (например, остановить некоторые.exe или программное обеспечение, чтобы улучшить производительность ПК). Я заметил, что иногда мой компьютер выполняет одну и ту же задачу в два разных периода времени: например, он может запустить программу за 45 секунд, а ту же программу снова через 10 минут.
4 ответа
MATLAB работает медленно на вашем компьютере или программы, которые вы написали в MATLAB?
MATLAB интенсивно использует динамическое выделение и перераспределение памяти; Изменение размера матрицы или массива может быть очень медленным и недетерминированным; если матрица или массив растут, выделяется новая память, а существующие данные копируются в новую память перед удалением старой копии. Вы можете избежать этого переполнения памяти, предварительно выделив такие массивы: например, этот код:
x = 0;
for k = 2:1000
x(k) = x(k-1) + 5;
end
причины x
быть изменен на каждой итерации и будет работать очень медленно. Для сравнения следующий код:
x = zeros(1, 1000);
for k = 2:1000
x(k) = x(k-1) + 5;
end
предварительно распределяет массив так, чтобы изменение размера не происходило и работало значительно быстрее.
На веб-сайте MathWorks есть целая страница с подробным описанием этого и других методов повышения производительности; страница охватывает следующее:
- Предварительно распределенные массивы
- Используйте распределенные массивы для больших наборов данных
- Если возможно, замените на parfor (параллельно для)
- Ограничение размера и сложности
- Присвоение переменным
- Использование соответствующих логических операторов
- Перегрузка встроенных функций
- Функции, как правило, быстрее, чем сценарии
- Загрузка и сохранение выполняются быстрее, чем функции ввода-вывода в файл
- Векторизация Петли
- Избегайте больших фоновых процессов
Обратите внимание, что решение, которое вы предложили, является последним в списке MathWorks, вы должны сначала рассмотреть все остальные вопросы, если вы не делаете что-то явно ресурсоемкое, например, запуск виртуальной машины или воспроизведение видео высокой четкости одновременно с запуском MATLAB., глядя на другие процессы, работающие, вероятно, потеют мелочи.
Следуя рекомендациям Клиффорда, вы можете использовать инструменты профилирования MATLAB, чтобы проверить, где ваша программа проводит большую часть своего времени, обычно не слишком много строк / функций. Затем сосредоточиться на оптимизации этих линий.
Если время выполнения вашего кода сильно варьируется, то, вероятно, у вас есть проблема, когда иногда, в некоторой степени, вы находитесь на грани виртуальной памяти. Когда MATLAB должен использовать пространство подкачки, все резко замедляется. В конце концов, вы используете дисковое пространство для замены доступности физической памяти. Это лучшая причина, которую я могу предложить для кода, который изменяется во времени на порядок во времени, затрачиваемом на разные прогоны.
Используйте инструмент профилировщика, чтобы определить, куда идет время. Посмотри внимательно на эти строки. Вы создаете большой массив, даже если это временно делается в какой-то вызываемой вами функции?
Проверьте свою систему. Посмотрите, когда это произойдет, если процессор работает в основном в режиме ожидания, а доступ к диску тяжелый.
Конечно, если это так, как я предлагаю, то решение тоже логично.
Сделайте ваш алгоритм более эффективным с точки зрения памяти. Это ВСЕГДА хорошо.
Получите больше оперативной памяти, если у вас сейчас меньше 2 ГБ.
Используйте 64-битную версию MATLAB и получите больше оперативной памяти.
По моему мнению, это должно быть некое узкое место, связанное с ресурсами системы, например проблема доступа к диску или перестановки памяти. Попробуйте посмотреть, что происходит в Process Explorer, там вы можете узнать, что происходит в системе.