Как ускорить выполнение программы Matlab?

19622
bzak

Существуют ли методы для ускорения выполнения кода MATLAB?

Я говорю о вещах, которые могут сделать мой компьютер быстрее (например, остановить некоторые .exe или программное обеспечение, чтобы улучшить производительность ПК). Я заметил, что иногда мой ПК выполняет одну и ту же задачу в два разных периода времени: например, он может запустить программу за 45 секунд, а ту же самую программу снова через 10 минут.

3
На самом деле это не вопрос, связанный с MATLAB (хотя в некоторых более ранних версиях R14 антивирус мог работать медленно). Как правило: чтобы быстро бегать, нужно делать меньше. 13 лет назад 0

4 ответа на вопрос

7
Clifford

Это 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, поскольку одна и та же программа выполняется в два разных периода времени (45 секунд и 10 минут). Возможно, форум зарезервирован для программирования, но моя проблема показывает, что медленное выполнение программы на Matlab может отличаться от плохого сценария. Поэтому, прежде чем проводить симуляцию, мы должны сначала убедиться, что ПК работает правильно, и для программиста также важно, чтобы содержание его программы. 13 лет назад 0
@bzak: В этом случае я добавляю свой голос, чтобы закрыть, хотя недетерминированное поведение означает именно то, что вы видите. Если алгоритм в какой-то момент выделяет достаточно памяти, чтобы потребовать перестановки памяти на диск, замедление будет значительным. В MATLAB добавление памяти часто является наиболее эффективным ускорителем. 13 лет назад 0
3

Следуя советам Клиффорда, вы можете использовать инструменты профилирования MATLAB, чтобы проверить, где ваша программа проводит большую часть своего времени, обычно не слишком много строк / функций. Затем сосредоточиться на оптимизации этих линий.

3

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

Используйте инструмент профилировщика, чтобы определить, куда идет время. Посмотри внимательно на эти строки. Вы создаете большой массив, даже если это временно делается в какой-то вызываемой вами функции?

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

Конечно, если это так, как я предлагаю, то решение тоже логично.

  • Сделайте ваш алгоритм более эффективным с точки зрения памяти. Это ВСЕГДА хорошо.

  • Получите больше оперативной памяти, если у вас сейчас меньше 2 ГБ.

  • Используйте 64-битную версию MATLAB и получите больше оперативной памяти.

+1. Если нет проблем с вводом / выводом, это, безусловно, причина. Как только вы начинаете пейджинг, все замедляется. Jonas 13 лет назад 0
2
jdehaan

По моему мнению, это должно быть некое узкое место, связанное с ресурсами системы, например, доступ к диску или перестановка памяти. Попробуйте посмотреть, что происходит в Process Explorer, там вы можете узнать, что происходит в системе.

Почти наверняка происходит MATLAB. Общеизвестно, что ресурс голоден. И вы, и bzak, вероятно, ошибаетесь, если думаете, что решение состоит в том, чтобы исправить ПК, а не код MATLAB. Более того, такие действия не являются темой для этого форума. 13 лет назад 2

Похожие вопросы