Могу ли я измерить ускорение от распараллеливания в matlab?


Если я предполагаю, что проблема является кандидатом на распараллеливание, например, умножение матрицы или какая-то другая проблема, и я использую Intel i7 Haswell dualcore, есть ли способ сравнить параллельное выполнение с последовательной версией той же программы или matlab оптимизирует программу для моей архитектуры (dualcore, quadcore..)? Я хотел бы узнать ускорение от добавления большего количества процессоров из хорошей тестовой программы parallell.

3 5

3 ответа:

Вы можете попробовать функцию "Run and time" на MATLAB.

Или просто поместите некоторые tic и toc в начало и конец вашего кода соответственно.

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

Поскольку ваша целевая архитектура имеет только 2 ядра, вам лучше вообще избегать распараллеливания и позволить Matlab и операционной системе оптимизировать выполнение. Во всяком случае, вот шаги, которым я следовал.

  • определите, подходит ли ваша задача для распараллеливания с помощью вычисление теоретического ускорения. Некоторые проблемы, такие как умножение матрицы или устранение Гаусса, хорошо изучены. Поскольку я предполагаю, что ваша задача сложнее, попробуйте разложить свой алгоритм на простые блоки и определить по блокам преимущества распараллеливания.
  • Если вы обнаружите, что несколько частей ваших алгоритмов могут извлечь выгоду из распараллеливания, изучите эти части отдельно.
  • получить статистическую информацию о времени выполнения вашего последовательный алгоритм. То есть запустите программу X раз при одинаковых условиях (и одинаковых входных данных) и усредните время выполнения.
  • получите статистическую информацию о времени выполнения вашего параллельного алгоритма.
  • измерьте с помощью профилировщика . Многие люди рекомендуют использовать функцию типа tic или toc. Профилировщик даст вам более точную картину вашего времени работы, а также подробную информацию по каждой функции. Смотрите документацию для подробная информация о том, как использовать профилировщик.
  • Не совершайте ошибку, не принимая во внимание время, которое Matlab занимает, чтобы открыть пул рабочих (я предполагаю, что вы работаете с Parallel Computing Toolbox). В зависимости от вашего количества работников, бассейн занимает больше/меньше времени, а в некоторых случаях это может быть до 1 минуты (2011b)!

Matlab предоставляет ряд функций синхронизации, которые помогут вам оценить производительность вашего кода: перейдите к документации здесь и выберите функцию, которую вы считаете наиболее подходящей в вашем случае! В частности, осознавайте разницу между tic toc и функция cputime.