Законы Амдала и Густафсона Мокшин Павел, 12225 Ускорение (speedup) Speedup = 𝑇(1) 𝑇(𝑁) Ускорение – отношение времени работы последовательного алгоритма T(1) ко времени работы параллельного алгоритма T(N). N – число параллельно работающих элементов (например, ядер, процессоров) Ускорение (speedup) Если последовательный алгоритм работает 6720 секунд, а параллельный – 126.7 секунд, то ускорение в этом случае составит 6720/126.7 ≈ 53x Законы Амдала и Густафсона Данные законы ориентированы на крупнозернистый параллелизм Как ускорится программа на большом количестве процессоров? Каков предел ускорения? Закон Амдала (Amdahl law) 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 ⩽ 1 𝑃 1 −𝑃 + 𝑁 P – доля работы, которую можно распараллелить N – число параллельно работающих элементов Закон предполагает линейное ускорение в зависимости от количества элементов Доказательство Speedup = 𝑇(1) 𝑇(𝑁) = 𝑇(1) 𝑇 1 ∙ 1−𝑃 𝑃 ∙𝑇(1) + 𝑁 = 1 𝑃 1 −𝑃 + 𝑁 Сначала пользуемся линейностью ускорения и тем что T(N)=T(1) для нераспараллеливаемой части, а затем просто сокращаем T(1) Закон Амдала 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 ⩽ 1 𝑃 1 −𝑃 + 𝑁 Если устремить число параллельных элементов к бесконечности, то получим: lim 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 = 𝑁→∞ 1 1 −𝑃 = 1 S S – нераспараллеливаемая часть программы Что отсюда следует? Закон Амдала Предположим, что в нашей задаче можно распараллелить 3/4 всех вычислений Тогда по закону Амдала, в лучшем случае мы получим ускорение: 1 1 lim 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 = = =4 𝑁→∞ 1 − 𝑃 1 − 3/4 То есть сколько ядер мы бы ни взяли, ускорение не превысит 4 раза! Потенциал распараллеливания сильно зависит от доли последовательной части Критика закона Амдала Игнорирование издержек на коммуникацию, синхронизацию, создание потоков, дисбаланс загрузки процессоров Закон предполагает, что объем данных для последовательного и параллельного алгоритма одинаков Закон Густафсона Густафсон установил, что исследователь, получая в своё распоряжение более мощную технику, старается использовать ее для более качественного решения задачи, например, с большей точностью При этом возрастает объём задачи, а доля последовательной части задачи уменьшается Закон Густафсона Вместо вопроса об ускорении на N процессорах рассмотрим вопрос о замедлении вычислений при переходе на один процессор: Scaled speedup = 𝑇(1) 𝑇(𝑁) = 𝑇 𝑁 ∙ 1−𝑃 +𝑁∙𝑃∙𝑇(𝑁) 𝑇 𝑁 ∙ 1−𝑃 +𝑃∙𝑇(𝑁) = = 1 + (𝑁 − 1) ∙ 𝑃 Для закона Густафсона ускорение называется ускорением масштабирования Закон Густафсона Scaled speedup = 1 + 𝑁 − 1 ∙ 𝑃 Как видно, ускорение масштабирования линейно зависит от количества процессоров Недостаток: закон применим не всегда. Нам не всегда нужно увеличивать объем задачи при росте количества процессоров Сравнение оценок Сравним оценки Амдала и Густафсона для некоторой задачи Пусть P = 3/4, N = 16. Тогда: 1 1 64 𝑆𝑝𝑒𝑒𝑑𝑢𝑝 = = = ≈ 3.368𝑥 1 3 3/4 19 + 1 − 3/4 + 4 64 16 3 4 𝑆𝑐𝑎𝑙𝑒𝑑 𝑠𝑝𝑒𝑒𝑑𝑢𝑝 = 1 + 16 − 1 ∙ = 49 4 ≈ 12.25𝑥 Вывод Были рассмотрены законы Амдала и Густафсона Если рассматривать максимальное ускорение для фиксированного объема данных, то оно определяется законом Амдала Если объем данных растет пропорционально количеству процессоров, то ускорение определяется законом Густафсона Закон Густафсона является гораздо более оптимистичным, но не всегда применим на практике