3

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

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

4 ответа4

7

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. , глядя на другие процессы, работающие, вероятно, потеют мелочи.

3

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

3

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

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

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

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

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

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

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

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .