Калькулятор закона Амдала
Введите долю работы, которую можно выполнять параллельно, и число процессоров или потоков. Калькулятор покажет ускорение по закону Амдала, эффективность на процессор, потолок, который не преодолеть никаким числом процессоров, и сколько их нужно для заданного ускорения. Для задачи, растущей вместе с системой, переключитесь на закон Густавсона.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Выберите Амдала для фиксированной задачи, которую нужно выполнить быстрее, или Густавсона для задачи, растущей с числом процессоров.
- Введите параллельную долю работы в процентах и число процессоров.
- Для закона Амдала можно задать нужное ускорение и узнать, сколько процессоров для него требуется и достижимо ли оно вообще.
Формулы
- Амдал: S = 1 ÷ ((1 − p) + p ÷ N); время работы = (1 − p) + p ÷ N от исходного; предел = 1 ÷ (1 − p).
- Процессоров для ускорения s: N = p ÷ (1/s − (1 − p)), с округлением вверх; при s ≥ 1 ÷ (1 − p) недостижимо.
- Густавсон: S = (1 − p) + p × N.
- Эффективность = S ÷ N.
Пример расчёта
Программа, параллельная на 90 %, на 8 процессорах:
- S = 1 ÷ (0,1 + 0,9 ÷ 8) = 1 ÷ 0,2125 = 4,706 ×;
- время работы 21,25 % от исходного, эффективность 4,706 ÷ 8 = 58,82 %;
- предельное ускорение 1 ÷ 0,1 = 10 ×;
- для ускорения в 4 раза нужно 0,9 ÷ (0,25 − 0,1) = 6 процессоров.
По закону Густавсона те же 90 % на 8 процессорах дают 0,1 + 0,9 × 8 = 7,3 ×.
Советы
- Сначала сокращайте последовательную часть. Переход с 90 % на 95 % параллельности поднимает потолок с 10 × до 20 × — больше, чем любое число дополнительных ядер.
- Эффективность падает с ростом N. С какого-то момента новые процессоры почти ничего не дают; строка эффективности показывает, когда.
- Гиперпотоки — не полноценные процессоры: для вычислительных задач считайте физические ядра.
Частые вопросы
Что такое закон Амдала?
Ускорение фиксированной задачи, если её параллельная часть p выполняется на N процессорах, а остальное — последовательно, S = 1 ÷ ((1 − p) + p/N). Последовательная часть задаёт жёсткий предел 1 ÷ (1 − p): задача, параллельная на 90 %, никогда не ускорится больше чем в 10 раз.
Чем отличается закон Густавсона?
Густавсон считает, что задача растёт вместе с системой и время работы не меняется, и спрашивает, во сколько раз больше работы удастся сделать, S = (1 − p) + p × N. Это ответ на другой вопрос, число получается больше; ни один из законов не ошибочен.
Как узнать параллельную долю своей программы?
Профилированием. Измерьте время последовательного запуска и тех частей, что можно раскидать по потокам; p — это время параллельной части, делённое на общее. Можно и наоборот: измерить ускорение на N ядрах и выразить p из закона Амдала.
Почему реальное ускорение меньше расчётного?
Закон не учитывает затраты на запуск потоков, обмен данными, блокировки, пропускную способность памяти и неравномерную нагрузку. Это верхняя граница при данном p, а не прогноз.