Могу ли я измерить ускорение от распараллеливания в matlab?
Если я предполагаю, что проблема является кандидатом на распараллеливание, например, умножение матрицы или какая-то другая проблема, и я использую Intel i7 Haswell dualcore, есть ли способ сравнить параллельное выполнение с последовательной версией той же программы или matlab оптимизирует программу для моей архитектуры (dualcore, quadcore..)? Я хотел бы узнать ускорение от добавления большего количества процессоров из хорошей тестовой программы parallell.
3 ответа:
Вы можете попробовать функцию
"Run and time"
на MATLAB.Или просто поместите некоторые
tic
иtoc
в начало и конец вашего кода соответственно.
К сожалению, такой вещи, как эталонная параллельная программа, не существует. Если вы измеряете ускорение для эталонного алгоритма, это не означает, что все алгоритмы выиграют от распараллеливания
Поскольку ваша целевая архитектура имеет только 2 ядра, вам лучше вообще избегать распараллеливания и позволить Matlab и операционной системе оптимизировать выполнение. Во всяком случае, вот шаги, которым я следовал.
- определите, подходит ли ваша задача для распараллеливания с помощью вычисление теоретического ускорения. Некоторые проблемы, такие как умножение матрицы или устранение Гаусса, хорошо изучены. Поскольку я предполагаю, что ваша задача сложнее, попробуйте разложить свой алгоритм на простые блоки и определить по блокам преимущества распараллеливания.
Если вы обнаружите, что несколько частей ваших алгоритмов могут извлечь выгоду из распараллеливания, изучите эти части отдельно.- получить статистическую информацию о времени выполнения вашего последовательный алгоритм. То есть запустите программу X раз при одинаковых условиях (и одинаковых входных данных) и усредните время выполнения.
- получите статистическую информацию о времени выполнения вашего параллельного алгоритма.
- измерьте с помощью профилировщика . Многие люди рекомендуют использовать функцию типа
tic
илиtoc
. Профилировщик даст вам более точную картину вашего времени работы, а также подробную информацию по каждой функции. Смотрите документацию для подробная информация о том, как использовать профилировщик.- Не совершайте ошибку, не принимая во внимание время, которое Matlab занимает, чтобы открыть пул рабочих (я предполагаю, что вы работаете с Parallel Computing Toolbox). В зависимости от вашего количества работников, бассейн занимает больше/меньше времени, а в некоторых случаях это может быть до 1 минуты (2011b)!
Matlab предоставляет ряд функций синхронизации, которые помогут вам оценить производительность вашего кода: перейдите к документации здесь и выберите функцию, которую вы считаете наиболее подходящей в вашем случае! В частности, осознавайте разницу между
tic
toc
и функцияcputime
.