Распараллеливание расчетов
Самое простое предположение, что Р процессоров выполнят задачу в Р раз быстрее, чем один, срабатывает только в идеальном случае. Обычно, дела обстоят не так уж хорошо, что иллюстрирует закон Амдала: , (2.1) где S – ускорение работы программы на P процессорах; f – доля непараллельного кода в программе. Эту формулу можно применять как для моделей с общей памятью, так и для модели передачи сообщений. Но для разных моделей понятие величина f представляет разные показатели. Для модели общей памяти эту долю образуют операторы, которые выполняются только в главной нити программы. В модели передачи сообщений непараллельная часть – это часть операторов, которые дублируются всеми процессорами. Напрямую, просто взглянув на код программы, оценить величину f практически невозможно. Это позволяет сделать только просчет на различном числе процессоров. Для наглядности можно привести следующую таблицу: Таблица 2.1. Ускорение работы программы в зависимости от
Как видно из таблицы, если доля последовательного кода составляет 2%, то более чем в 50 раз ускорить процесс нельзя. Но, чтобы получить такое ускорение, запускать программу на 1024 (и более) процессорах ни к чему. Приемлемым может оказаться выполнение задачи и на 32 процессорах. Закон Амдала всего лишь устанавливает максимальное число процессоров, на которых будет выполняться программа с заданной эффективностью, при указанной доле непараллельного кода. Причем, в этой формуле не учитываются потери производительности при обмене информацией между процессорами. Поэтому, в реальности ситуация будет еще хуже. Не стоит думать, что распараллеливание – единственный метод увеличения скорости работы программы. Достаточно всего лишь оптимизировать код, и даже на однопроцессорной ЭВМ можно добиться существенного ускорения.
|