Законы информатики

Законы информатики

Давайте познакомимся с некоторыми законами информатики: законом Мура, законом Амдала, законом Густафсона и законом Вирта.

Законы информатики — это что? Правила, которые запрещают программистам друг друга бить и обижать? Или они сродни законам физики — описывают, как что функционирует в мире высоких технологий?

Попробуем классифицировать наиболее известные законы.

Закон Мура

Основанный на наблюдениях закон Мура  гласит, что число транзисторов на микрочипе удваивается каждые два года*, при этом стоимость компонентов уменьшается. Следовательно, скорость и возможности компьютеров увеличиваются каждую пару лет, а платить за эти преимущества требуется меньше. Принято считать, что производительность и тактовая частота процессора удваиваются, а стоимость производства чипа снижается вдвое каждые 18 месяцев**. Действительно, последние 50 лет это так и было. Однако закон Мура прекращает действовать из-за технических ограничений.

Известный программист Херб Саттер (Herb Sutter) написал в 2005 году: «Закон Мура предсказывает рост по экспоненте, но ясно, что так не может продолжаться вечно, мы приближаемся к физическому пределу».

Основная идея этой популярной статьи Саттера в том, что рост производительности будет достигаться принципиально иными средствами, по крайней мере, для пары следующих поколений процессоров. Большинство существующих программ не ускорятся сами по себе, нужен существенный редизайн. Хочешь, чтобы экспоненциальный рост производительности процессоров помогал твоей программе — пиши ее оптимально, с учетом многопоточного параллельного выполнения. Легче сказать, чем сделать — и потому что не все задачи можно распараллелить, и потому что параллельное программирование сложное, что приводит нас к закону Амдала.

Закон Амдала

Закон Амдала — это формула, по которой можно рассчитать максимальное ускорение, т.е. во сколько раз  быстрее может выполниться программа, если  улучшились ресурсы системы. При параллельных вычислениях закон Амдала в основном применяется для прогнозирования максимального ускорения благодаря использованию нескольких процессоров.

где:

  • Slatency — теоретически возможное ускорение выполнения всей задачи;
  • s — ускорение  части программы, операции которой можно выполнить параллельно;
  • p — доля времени выполнения распараллеленной части, (1 – p) — доля времени последовательных вычислений.

Закон Густафсона

Закон Густафсона определяет возможность ускорения выполнения задачи с фиксированным временем при наращивании ресурсов системы. При расчете ускорения S учитывается количество параллельно выполняемых на N процессорах потоков программы  и доля ее последовательных вычислений.

 S = N + (1 — Ns

где N — число процессоров (отличное от 1), s — доля последовательной части.

Видна линейная зависимость ускорения от числа процессоров.

Используя другие переменные, закон Густафсона можно сформулировать следующим образом:

S latency (s) = 1 – p + sp,

где:

  • Slatency — теоретическое ускорение  выполнения всего задания;
  • s — ускорение для распараллеленной части;
  • p — доля рабочей нагрузки, которая выигрывает от улучшения системы; соответственно, 1 — p — доля последовательных вычислений.

 

Закон Густафсона преодолевает ограничения*** закона Амдала, сформулированного для задач фиксированного объема, не меняющегося при улучшении ресурсов. Закон Густафсона предполагает, что программисты склонны выбирать размер задачи, при котором в полной мере используется мощность улучшенных ресурсов — чем быстрее работает оборудование, тем сильнее можно увеличить объем задачи при неизменном времени выполнения.

Согласно закону Густафсона эффективность выводится на новый уровень, поскольку часто больший объем решаемой задачи позволяет увеличить объем параллельных вычислений.

Цель оптимизации с применением закона Амдала —  заставить программу работать быстрее с неизменной рабочей нагрузкой, закона  Густафсона — выполнять более сложную программу, не увеличивая общее время исполнения. В этом основное различие двух законов.

Закон Вирта

Закон Вирта гласит, что замедление программ перекрывает ускорение компьютеров.

В 2009 году закон приписали Ларри Пейджу, основателю Google. В других вариантах упоминаются Intel и Microsoft или их руководители (Энди Гроув и Билл Гейтс): «Что дает Intel, отнимает Microsoft» и «Что дает Энди, забирает Билл».

Законы, о которых говорится в этой статье, основаны на наблюдениях, экспериментах и математике. Они напоминают законы физики, а не законы, которые создаются ради мира и безопасности общества.

Кроме рассмотренных законов, также очень популярны принципы SOLID, шаблоны проектирования GRASP, различные архитектурные паттерны и лучшие практики программирования. Они помогают создавать стабильные, управляемые, хорошо адаптирующиеся к изменениям программы.

Автор оригинала: Daniela Kolarova

Переводчик: Юлия Смирнова.

Рецензент: Владимир Кочетков

 

Примечания:

* Гордон Мур (Gordon Moor) в своей статье 1965 г. , “Cramming More Components onto Integrated Circuits”, на основе наблюдений сделал прогноз на 10 лет вперед, что количество транзисторов на чипе ежегодно будет удваиваться, а мощность вычислительных устройств — расти экспоненциально. В 1975 году Мур дополнил свой вывод: где-то с 1980 года удвоение будет происходить примерно раз в два года.

** Строго говоря, это Дэвид Хаус (David House), коллега Мура из Intel, пришел к выводу, что производительность  интегральных схем удваивается раз в 18 месяцев.

*** Даже при неограниченном количестве процессоров ускорение ограничено долей последовательной части (при числе процессоров стремящемся к бесконечности, ускорение равно 1, деленной на долю последовательной части). Например, доля последовательной части составляет 0,25 (т. е. 25%), теоретически в этом случае ускорение не может быть больше 4.