пятница, 5 июля 2013 г.

Закон Амдала (Amdahl's law)

Общаясь с коллегой на тему паралленьного программирования и многопоточности, мы затронули вопрос о производительности большоко количества потоков. Я с удивлением узнал, что много программистов не знает Закона Амдала, который иллюстрирует ограничение роста с увеличением вычислителей.

Приведу сам закон:
«В случае, когда задача разделяется на несколько частей, суммарное время её выполнения на параллельной системе не может быть меньше времени выполнения самого длинного фрагмента».
Математическая формулировка (взято из Википедии):
Предположим, что необходимо решить некоторую вычислительную задачу. Предположим, что её алгоритм таков, что доля \alpha от общего объёма вычислений может быть получена только последовательными расчётами, а, соответственно, доля 1 - \alpha может быть распараллелена идеально (то есть время вычисления будет обратно пропорционально числу задействованных узлов p). Тогда ускорение, которое может быть получено на вычислительной системе из p процессоров, по сравнению с однопроцессорным решением не будет превышать величины
S_p = \cfrac{1}{\alpha + \cfrac{1 - \alpha}{p}}
Но самое главное вывод, который можно сделать из Закона Амдала:
С определенного момента добавление новых узлов (потоков, процессов) будет увеличивать время расчета задачи.

Проиллюстрирую это на графике:

Комментариев нет:

Отправить комментарий