irony kike Uri ([info]riki_koen) wrote,

Закон Амдала в реальном мире

Современные вычислительные процессоры настолько быстры, что разогнать их еще сильнее крайне тяжело¹. А новые расчётные задачи требуют всё бóльших мощностей. Поэтому, сохраняя старую архитектуру, мы вынуждены идти по пути наращивания количества вычислителей (процессоров, ядер — не важно).

Логично думать, что если один процессор выполнит работу за час, то два, работающих сообща, сделают ту же работу за полчаса. Для больших и сложных задач такое бывает часто. Тогда можно предположить, что три процессора сосчитают нашу задачу за 20 минут, а десять процессоров — за шесть минут. А 3600 процессоров — за секунду? Да, но только в том случае, если нашу задачу можно разделить на 3600 независимых друг от друга частей.

В реальной жизни очень редко встречаются задачи², допускающие деление на 3600 полностью независимых подзадач. Почти наверняка какая-то доля p всех расчётов может быть вычислена только после того, как вычислено что-то другое. Закон Амдала гарантирует нам, что если последовательная часть задачи составляет половину, то хоть ты тресни, раскидыванием на много процессоров вычисления можно ускорить максимум в два раза.



Теперь самое интересное. Описанный выше случай — идеальный. Закон Амдала говорит только о принципиальном ограничении того выигрыша в скорости, который мы можем получить за счёт раскидывания задачи на много процессоров. В реальности надо учесть еще и архитектуру компьютера.

Если мы раскидали вычисления на процессорные нити (threads), и они обмениваются между собой (или даже только с одним «главным» процессом) информацией, тогда мгновенно наши графики получают максимумы:
  • Было (закон Амдала):

    S — во сколько раз можно ускорить вычисления, N — количество вычислителей, p — доля последовательно вычисляемого кода. Графики для разных значений p см. выше.
  • Стало:
    теперь процессы обмениваются пакетами данных — считаем, что число пересылаемых пакетов пропорционально числу процессов, поэтому ко времени расчётов надо прибавить число, пропорциональное N.

    где A — какая-то маленькая положительная константа, пропорциональная скорости передачи данных между процессами. Какой бы маленькой она ни была, всё равно на большом количестве вычислителей быстродействие будет меньше, чем на некотором максимальном значении. А в пределе вообще ноль:



На графике показаны две кривые ускорения, соответствующие p = 0.9: идеальный случай (красная кривая) и реальный (синяя) с A = 0.001. Видно, что считать такую задачу более чем на тридцати процессорах бессмысленно.
25.95 КБ

Суперкомпьютер отличается от «обычного» компьютера, не тем, что у него много ядер, а тем, что эти ядра у него соединены в быструю сеть, т.е. коэффициент A из (2) у него очень маленький.

Умные люди говорят³, что зависимость может быть не такая страшная, а всего лишь

где функция f мала для больших N, а B — другая маленькая константа. (Я несколько упрощаю, но принципиально всё так.)

Вывод: если кто-то просит у вас денег на суперкомпьютер, спросите у него, как он собирается обойти закон Амдала. Десять поваров не сварят стакан риса за минуту.
_________________________
¹ Тактовая частота процессора 3 ГГц = 3×10⁹ 1/c соответствует тому, что сигнал за один такт пройдёт не далее, чем на 10 см. Конечно, 10 см — это очень большое расстояние в масштабах процессора. Но ведь частота интерфейса, связывающего отдельные ядра, меньше в разы, а частота, шины, связывающей процессор со внешней памятью, меньше на несколько порядков.
² Кроме задач типа «сосчитаем что-нибудь по методу Монте-Карло» я больше и не придумаю.
³ http://www.clgrid.cl/images/2/26/Cluster-scalability.pdf
Tags: progress

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    Your reply will be screened

    Your IP address will be recorded 

  • 14 comments

[info]dm_kalashnikov

March 9 2011, 05:34:40 UTC 1 year ago

То есть, как я понял, Вы описали сетевой закон Амдала? Правда там вводится т.н. коэффициент сетевой деградации.

[info]riki_koen

March 9 2011, 06:17:38 UTC 1 year ago

Может, так оно и называется, я такого названия по-русски ни разу не встречал, но я и не интересовался. Не поделитесь ли релевантной ссылкой на приличную работу по этой теме? Гугл не предлагать.

[info]dm_kalashnikov

March 9 2011, 06:29:29 UTC 1 year ago

Да запросто, вот http://www.cluster.bsu.by/download/ShakovskiLectArchHPC.pdf

[info]riki_koen

March 9 2011, 10:23:37 UTC 1 year ago

Посмотрел. Спасибо. В целом не так плохо, но конкретно про Амдала там довольно скупо. В работе есть новое название («сетевой закон Амдала»), но толком не сказано, что за ним стоит. Ну ввели они т.наз. «коэф-т сетевой деградации» — так он у них константа. И вроде они на словах говорят, что он зависит от того, от сего, и вроде говорится, что время вычисления на нескольких процессорах может быть больше, чем на одном-единственном, но никаких конкретных оценок не делается. Вот так и получается, что студенты и преподаватели(!) не могут понять, почему же у них программа не масштабируется — это стало поводом для написание заметки.

Работа интеловского индуса, на мой взгляд, даёт более полное представление о предмете, не важно, как его называть.

[info]dm_kalashnikov

March 9 2011, 11:18:10 UTC 1 year ago

Вероятно, Вы правы.

Кстати, "хорошо распараллеливаемых" задач пока довольно много и грид-системы сейчас в моде (в отличие от дорогих мультипроцессорных систем).

[info]riki_koen

March 9 2011, 11:34:12 UTC 1 year ago

Вот я еще вспомнил разные линпак-образные задачи. А еще?

[info]dm_kalashnikov

March 9 2011, 11:36:05 UTC 1 year ago

SETI and Folding @ home.

[info]riki_koen

March 9 2011, 11:53:57 UTC 1 year ago

А, ну да. Что-угодно-на-BOINC вообще. Правда там параллелизм по данным, так что наши проблемы им не грозят.

[info]potap

March 9 2011, 06:18:32 UTC 1 year ago

Я однажды считал задачу на сети из 40 примерно рабочих станций примерно в течение недели, применяя метод динамического ручного распараллеливания: перебрасывал ручками процессы с одной машины на другую, если одна справлялась с задачей слишком медленно, а другая слишком быстро.

[info]riki_koen

March 9 2011, 10:26:13 UTC 1 year ago

$ sudo /etc/init.d/potapd start
:-)

[info]riki_koen

March 9 2011, 10:40:30 UTC 1 year ago

Расскажите, что за задача такая на неделю счёта? Я думал у вас вся наука на бумаге, а на компьютере только TeX и arXiv.org.

[info]potap

March 9 2011, 11:02:09 UTC 1 year ago

Описано тут, параграф 3 "Вычисления".

[info]riki_koen

March 9 2011, 11:59:47 UTC 1 year ago

Здорово. Я так подозреваю, у вас сейчас в сотовом телефоне процессор мощнее, чем Pentium Pro 200.

Я для магистерской генерировал 50 тыщ диаграмм на 8 ядрах и даже считал какие-то их симметрийные коэффициенты и придумывал эвристику для обхода прямого перебора.

[info]potap

March 9 2011, 12:25:46 UTC 1 year ago

Хорошее дело.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…