Оценка эффективности параллельных вычислений Комышев Е. Г. гр. 12226 Ускорение Ускорение – это отношение времени последовательного к времени параллельного выполнения программы. Метрика Метрика эффективности (efficiency) показывает, насколько хорошо программа использует вычислительные ресурсы системы. Пример 53-кратное ускорение на 64 ядрах даёт эффективность в 82.8% (53/64 = 0.828) => каждое ядро простаивает около 17% времени Причины потери эффективности время инициализации параллельной программы несбалансированность загрузки процессоров затраты на коммуникации наличие в программе последовательных частей отсутствие максимального параллелизма в алгоритме несбалансированность загрузки процессоров временные затраты на обмен данными, конфликты в памяти и на синхронизацию Оценка максимального достижимого параллелизма Закон Амдала Закон Густафсона Закон Амдала W = Wск + Wпр, где W − общее число операций в задаче, Wпр − число операций, которые можно выполнять параллельно, а Wcк − число скалярных (нераспараллеливаемых) операций. a = Wск /W − удельный вес скалярных операций. • Ускорение зависит от потенциального параллелизма задачи и числа ядер n. • Предельное ускорение определяется свойствами задачи. Пример 1) если 95% времени последовательного выполнения может выполняться параллельно на 8 ядрах, то оценочное ускорение, согласно закону Амдала, составит около 6x (1 / (0.05 + 0.95/8) = 5.925) 2) возьмем a = 0,2 (что является реальным значением), тогда ускорение не может превосходить 5 при любом числе процессоров, то есть максимальное ускорение определяется потенциальным параллелизмом задачи. Недостатки игнорирование издержек на коммуникации, синхронизацию и др. действий по управлению потоками предположение о бесконечном количестве ядер подразумевает использование фиксированного набора данных при любом количестве ядер предполагает, что процент времени последовательного выполнения останется одним и тем же Закон Густафсона масштабируемое ускорение s – процент времени последовательного выполнения в параллельном приложении для указанного размера набора данных. + берёт в расчёт рост объёма данных в пропорции к росту количества ядер и рассчитывает (верхнюю границу) ускорения работы приложения, как если бы больший объём данных мог быть обработан последовательно Пример Eсли 1% времени работы на 32 ядрах выполняется последовательно, то ускорение выполнения такого приложения на том же наборе данных по сравнению с выполнением на одном ядре с одним потоком равно: Сравнение Закон Амдала: процент последовательного выполнения равен 1%, => 1/(0.01 + (0.99/32)) = 24.43x – плохой результат. - оценён для выполнения на 32 ядрах Если код идеально масштабируемый и объём данных увеличивается соответственно количеству ядер, то процент может остаться прежним. Сравнение Пусть общее время выполнения параллельного приложения составляет 1040 секунд на 32 ядрах. => 1% последовательного времени = 10.4 сек. 1029.6(параллельное время)*32(ядра)+10.4 = 32957.6 секунд. Непараллельное время (10.4 секунды) составляет 0.032% общего времени работы. Учитывая результат, закон Амдала даёт ускорение в 1/(0.00032 + (0.99968/32)) = 31.686x. Выводы Для использования закон Густафсона необходимо знать процент последовательного времени при параллельном выполнении => эта формула обычно используется для расчёта ускорения масштабируемого параллельного выполнения, по отношению к последовательному выполнению задачи того же размера. Cтрогое использование данных о выполнении программы в формуле закона Амдала даёт гораздо более пессимистическую оценку, чем формула масштабируемого ускорения. Суперлинейное ускорение - превышение ускорения приложения количества ядер. При декомпозиции блоки данных стали достаточно малы, чтобы целиком помещаться в локальный кэш ядер. Суммарная оперативная память параллельной системы превышает оперативную память последовательной ЭВМ, с которой производится сравнение. Использование на параллельной вычислительной системе априори параллельного алгоритма, который не может быть использован на последовательной ЭВМ. Спасибо за внимание