#parallel-processing #cpu-architecture
#Производительность #параллельная обработка #архитектура процессора
Вопрос:
Я пытаюсь понять следующий слайд
Определение мне непонятно. Источники, такие как википедия, говорят, что Amdahl измеряет ускорение задержки выполнения задачи при фиксированной рабочей нагрузке, которое можно ожидать от системы, ресурсы которой улучшены. Для меня ускорение — это, по сути, то, насколько быстрее задача выполняется над другой задачей. Ускорение в этом случае используется по-другому. Можете ли вы пояснить, что закон Амдала измеряет более простым способом и что такое ускорение на самом деле?
Комментарии:
1. Ускорение — это то, насколько быстрее одна и та же программа будет выполняться в системе B по сравнению с системой A, если у B есть какая-то дополнительная функция или поведение, отличное от A.
2. Хорошо, но можете ли вы объяснить идею, лежащую в основе закона Амдала?
Ответ №1:
Определение ускорения здесь:
Speedup
= Baseline Running Time
/ New Running Time
Это означает, что если время выполнения равно BRT, а распараллеливаемая часть равна P, то:
BRT = (1 - P) * BRT P * BRT
Теперь, если было получено ускорение S на P части времени выполнения, то новое улучшенное время выполнения (IRT) равно:
IRT = (1 - P) * BRT P * (BRT / S)
= (1 - P) * BRT (P / S) * BRT
= ((1 - P) (P / S)) * BRT
Поэтому:
BRT / IRT = 1 / ((1 - P) (P / S))
Это общее ускорение. Это закон Амдала.
Для меня ускорение — это, по сути, то, насколько быстрее задача выполняется над другой задачей.
Да, ускорение может быть определено по-разному. Это может немного сбить с толку.
Ответ №2:
Закон Амдала измеряет теоретическое максимальное ускорение, этого почти никогда не достигается, формулу легко понять, как только вы знаете, что означают разные части,
Итак, формула Speedup = 1/ 1-f f/p
,
- 1 означает весь код,
- 1-f означает объем последовательного кода (не может быть распараллелен),
- f означает код, который может быть распараллелен,
- p означает количество процессоров,
Итак, если мы скажем, что есть 10 процессоров, и у нас есть 40% кода, который можно распараллелить.
формула ускорения = 1/ 1-40% (0.4) 40%(0.4)/10
Не профессионал, и вы, возможно, захотите это проверить, но, если я правильно помню, именно так это и должно работать 🙂
Комментарии:
1. В вашей формуле отсутствуют скобки. При стандартном порядке операций то, что вы написали, означает
(1/1) - f (f/p)
. Но да, в основном хороший ответ; Закон Амдала предполагает идеальное масштабирование для параллельных частей рабочей нагрузки, поэтому он чисто теоретический и нереалистичный для большинства проблем.
Ответ №3:
Ни одна система не является по-настоящему параллельной. они могут запускаться параллельно, затем выполняться последовательно, а затем снова параллельно в каждом отдельном рабочем процессе. В общем, мы должны снимать блокировки, координировать потоки, синхронизировать код. Таким образом, в параллельном процессе будут последовательные части. Во время этой последовательной части несколько потоков / процессов, которые выполняются, получают queueing
. Закон Амдала показывает, насколько сильно последовательная часть влияет на график производительности (пропускной способности). Как вы видите на изображении:
если бы это была идеальная параллельная система, скорость была бы идеально линейной. Если в процессе есть последовательная часть, не имеет значения, 5 или 10 процентов, скорость графика будет неизменной после заданной точки. Закон Амдала вычисляет, как скоро график выровняется. Если он выровнен, это означает throughput
, что он уменьшился.
Формула на слайде гласит, что ускорение программы при использовании большего количества параллельных ядер зависит от того, какая часть программы является последовательной.