Rambler's Top100
 
 
  05 декабря 2008 года Компьюлента
CIO
Терралаб
Бизнес-журнал
в поле зрения | обзоры и тесты | своя игра | интерактив
Вдоль или поперек?
Автор: Константин Кноп
Опубликовано в журнале "Компьютерра" №22 от 08 июня 1998 года

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

Представьте себе простейшую вычислительную задачу - найти сумму нескольких чисел. Если в вашем распоряжении один компьютер, то все просто и понятно: "длина" вычисления прямо пропорциональна количеству складываемых чисел. А если компьютеров несколько? Для определенности будем считать, что у вас P компьютеров (то есть "ширина вычислений" равна P), обмен данными между ними занимает пренебрежимо малое время, а количество слагаемых равно 1000. Предположим, что каждое элементарное сложение занимает 1 единицу времени (такт). Мы будем интересоваться алгоритмом решения задачи за наименьшее число тактов на P компьютерах - это количество обозначим TP. Очевидно, что T1=1000: в каком порядке ни складывай исходные числа, между ними стоит 999 знаков "+", поэтому для получения результата требуется ровно 999 сложений.

Случай P=2

Второй компьютер позволяет сократить время вычисления почти вдвое. Это достигается, например так: пока первый компьютер находит сумму первых 500 чисел, второй в это же время суммирует остальные 500 чисел. После 499 тактов останется выполнить только одно действие - сложить две накопленных суммы S1 и S2 и получить общую сумму S=S1+S2. Это сложение выполняется на любом из двух компьютеров, а вторая машина в это время "отдыхает". Итак, T2=500.

Случай P=4

Разделим весь процесс на четыре равные части. Через 249 тактов компьютеры получат суммы S1, S2, S3 и S4. За следующий такт можно найти одновременно S1+S2 и S3+S4, ну, и затем уже вычислить S1+S2+S3+S4. Итого T4=251, но при этом в последнем такте работает только один из четырех компьютеров.

Случай P=500

Представим на секундочку, что у нас есть именно такое число компьютеров. Тогда мы можем одновременно выполнить все 500 попарных сложений, на втором шаге получить 250 сумм по 4, и т. д. Чем ближе к концу, тем меньшее число компьютеров будет загружено. На десятом шаге делается последнее сложение (T500=10), а остальные 499 компьютеров в этот момент простаивают…

Я описал эти вычисления так подробно только потому, что из них становится понятна принципиальная особенность распараллеливания: чем "шире" идет процесс вычислений, тем он становится короче, но одновременно возрастает доля "холостого хода". В любом случае, PхTPіT1, и равенство достигается только в том случае, если в каждом такте вычислений задействованы все имеющиеся компьютеры. При этом рассмотренная мною задача не является чем-то исключительным, - наоборот, почти так же обстоит дело и при построении параллельных алгоритмов для решения самых разных задач.

Одним из важнейших показателей эффективности параллельного алгоритма считается "ценность" fP=T1/(PхTP2) - чем она выше, тем лучше. В приведенных примерах f1=999/9992=0,00100, f2=0,00199, f4=0,00396, f500=999/(500*102)=0,01998. Является ли 0,01998 максимально возможной ценностью? Оказывается, нет - но это уже сюжет для небольших задачек, которые я и предлагаю читателям.

Задача 1

Решите задачу суммирования для P=100 компьютеров за 16 тактов. А потом - для P=175 компьютеров за 12 тактов. ("Ценность" второго решения f175 примерно равна 0,03964)

Задача 2

Попробуйте ответить на "обратные" вопросы: какое наименьшее число компьютеров позволяет решить задачу за 13 тактов? за 14 тактов? за 15 тактов? Можно ли решить задачу за 16 тактов, если число компьютеров меньше 100?

Задача 3

Найдите количество компьютеров, для которого "ценность" параллельного алгоритма суммирования будет наибольшей.

Перейдем теперь к другим задачам на ту же тему.

Задача 4

Проследите, как изменятся решения всех предыдущих задач (и ответы к ним), если количество суммируемых чисел увеличить в 10 раз.

Понятно, что оптимальное (в смысле ценности) число компьютеров меняется в зависимости от "объема" конкретной задачи. Но надо хорошо понимать, что наша задача - лишь модель, а в реальности при увеличении числа компьютеров сильно растет доля времени, которое непродуктивно тратится на передачу данных между компьютерами.

Задача 5

Решите заново все предыдущие задачи, считая теперь, что передача числа от одного компьютера к другому тоже занимает один такт (при этом числа могут передаваться параллельно).

Задача 6

Придумайте, как распараллелить вычисление значения многочлена:

P(x) = a0 + a1 x + a2 x2 ++ an xn.

Задача 7

Представьте, что ваш знакомый задумал число, не превышающее одного миллиона, а вам надо его угадать, задавая вопросы, на которые знакомый может отвечать "да" или "нет". Классический метод деления пополам - дихотомии - гарантирует успех за 20 попыток (220>1000000). А теперь попробуйте придумать экономный "параллельный" алгоритм: задуманное число знают P=4 разных человека, а вы можете за одну "попытку" задать каждому из них свой вопрос и получить ответ на него. Сколько попыток при этом вам хватит для отгадывания задуманного числа? А если P=5? А при P=10?

Можете присылать мне решения понравившихся задач, я постараюсь ответить на все письма читателей.

ТАКЖЕ В РАЗДЕЛЕ
28 декабря 2001 года
Приятные билеты 
10 августа 1998 года
Фортуна в колесе  
13 июля 1998 года
Данетки-4  
29 июня 1998 года
Словесный бой 
01 июня 1998 года
Все врут календари? 
25 мая 1998 года
Ним-игры 
 
САМОЕ ПОПУЛЯРНОЕ
Здравствуй, Ubuntu!
Надоела Windows? Не нравится политика Apple? Тогда самое время попробовать какой-нибудь дистрибутив Linux. Например, Ubuntu. А мы поможем.
Как самураи финнов выгнали
Крупнейший в мире производитель мобильных телефонов - финская компания Nokia - сунулся в Японию, в надежде получить 10% местного рынка. Но не тут-то было.
Как дела, "хромой"?
Два месяца назад Google с помпой объявила о выходе в свет бета-версии собственного браузера - Chrome, основанного на движке WebKit. Теперь, когда пыль улеглась, давайте посмотрим, как дела у гугловского подопечного.
Ноутбучные отчеты
Никакого повидла - Сергей Голубицкий отчитывается по ноутбукам, с которыми провел последние три года. Как сломать ASUS, чем хороша Toshiba и сколько стоит Sony.  
/  бумажный номер

Тема номера: Кризис в ИТ Читайте на сайте тему номера "Кризис в ИТ" и другие статьи из журнала "Компьютерра" от 04 ноября 2008 года
  Архив номеров журнала

О проекте | Реклама на сайте | Рассылки сайта | КПК–версия | RSS-трансляция

© ООО «Компьютерра–Онлайн», 1997 — 2008.
При цитировании и использовании любых материалов ссылка на портал «Компьютерра–Онлайн» обязательна (для Интернет–изданий — www.computerra.ru)
Редакция сайта: site@computerra.ru
Техподдержка сайта: websupport@computerra.ru
Редакция журнала: inform@computerra.ru
Отдел рекламы: reklama@computerra.ru
Телефон: (495) 232–22–61, (495) 232–22–63
Работает на «Битрикс: Управление сайтом»
Почта защищена сервером «СПАМОРЕЗ»
Трилан — продвижение сайта,
поисковая оптимизация сайта

Сайт работает на сервере DEPO Computers
Rambler's Top100