Краткая информация о конкурсе
Конкурсы серии «Объясни на пальцах» объединены одной идеей: на простых примерах объяснить сложные термины из определенных областей программирования. Для каждого из конкурсов мы подбираем несколько терминов, а участники присылают нам их толкования.
Для опытных программистов «Объясни на пальцах» - это хорошая возможность немного расслабиться и продемонстрировать свое чувство юмора. Для начинающих – стимул еще раз перечитать учебники и тематические статьи в Интернете. Судьи выбирают победителей по критериям «корректность» и «творческий подход», а это значит, что «объяснения» должны быть технически точными, хорошо запоминающимися и веселыми. Авторы лучших объяснений получают скромные, но приятные призы от команды Intel® Developer Zone.
В конкурсе «Объясни на пальцах v2.0» мы предложили раскрыть несколько базовых терминов, описывающих фундаментальные понятия технологий параллельного программирования. Вот их список:
- Data decomposition & Functional decomposition
- SIMD & MIMD
- Multitasking & Multithreading
- Busy waiting thread & Sleeping thread
- Thread Pool
- Context Switching
Победители
За три с небольшим недели (с 1 по 24-е июля 2009) 78 участников оставили в нашем форуме более 300 «объяснений». Судейская коллегия тщательно изучила все присланные варианты, оценила их, подсчитала голоса участников сообщества, и выбрала победителей:
- Первое место: Григорий Петров, г. Москва a.k.a. eyeofhell
К Григорию отправляется наш главный приз - Нетбук Lenovo IdeaPad S10. Вот такой:

- Второе место: Павел Довгалюк a.k.a. dovgaluk
- Третье место: radiometer (имя уточняется)
Павел и radiometer получают утешительные призы: подарочные карты VISA номиналом в 3000 рублей и USB 4G модемы.
Многие участники конкурса продемонстрировали здоровое чувство юмора и неплохое понимание предметной области. Стараясь выбрать лучших из лучших, судьи потратили два лишних дня на оценки и составление итогового рейтинга. Мы приносим прощения за задержку с объявлением итогов, и хотим отметить тех, кто был буквально в одном шаге от призовой тройки. Не расстраивайтесь! Следите за анонсами на страницах Intel® DZ и в специальном «конкурсном» блоге. В следующий раз вам обязательно повезет!
Итак, десятка самых креативных параллельных программистов:
Лучшие «объяснения»
Полный список конкурсных «объяснений» можно найти в нашем форуме. На данной странице мы приведем некоторые работы от десятки лучших участников:
Data decomposition & Functional decomposition by Ferlon
Все мы учились в школе, поэтому должны помнить. В младших классах каждый учитель ведёт занятия сразу по всем предметам, но у детей только из своего класса - это data decomposition. А в старших классах каждый учитель преподаёт только свой предмет, но зато сразу в нескольких классах - это functional decomposition.
SIMD & MIMD by radiometer
Пельменная таксономия. Когда хочется домашних пельменей, то чтобы их налепить приходится работать в режиме SIMD – есть куча лепешек, которые надо по-одному слепить в пельмень. Это крайне неэффективно. Поэтому, так как данные (пельмени) однотипные, можно пользоваться бытовой пельменницей, которая одним движением способна слепить сразу несколько пельменей (SIMD).
Хотя и тут есть недостаток – пропускная способность шины не велика: надо накатать тесто на пельменницу и разложить мясо – в общем обеспечить исполнительное устройство данными, а оно в это время простаивает. Поэтому лучше всего прибегнуть к MIMD-архитектуре – позвать друзей и лепить пельмени вместе. При этом «исполнительные устройства» работают асинхронно и независимо, но пользуются «разделяемой памятью», т.е. столом, где лежать пельмени, и плашками, куда складываются готовые «данные».
Multitasking & Multithreading by eyeofhell
Однажды, когда многомудрый гуру спокойно пил чай и медитировал над парадигмой евроремонта, к нему прибежал запыхавшийся прораб.
- Не успеваю! - воскликнул он, с мольбой глядя на учителя.
- Что, опять два десятка рабочих набрал, а работают одновременно только двое? - с улыбкой спросил учитель.
- Опять.
- А ты помнишь, чем отличается многозадачность от многопоточности?, - с еще более широкой улыбкой поинтересовался учитель.
- Ну… э… они все одновременно делать должны. Но ведь не делают!
- Не используй волшебное слово «все», юный подаван, - посерьезнел учитель. - Оккама на тебя нет. Есть задачи - их надо выполнять. Например, сейчас тебе надо выложить кафелем пол торгового центра и покрасить его стены, так?
- Так..., - прораб даже потерял дар речи от проницательности учителя. О нервно сжимаемом в руках куске кафеля он уже давно забыл и свято верил в то, что учитель обладает не только большой мудростью, но и даром телепатии.
- Это твои задач. Их две. И небось, у тебя как обычно Джамшут кладет плитку, Равшид красит стены и еще восемнадцать человек перекуривают?
- Да, - грустно согласился ученик.
- Это потому, что многозадачность - это одновременное выполнение задач. Но если ты хочешь чтобы задачи выполнялись не только одновременно но и быстро - дели каждую из них на части и тоже выполняй эти части одновременно. Это и будет многопоточность - пусть девять человек одновременно с Джамшутом кладут плитку, а еще девять одновременно с Равшидом красят стены. И будет тебе, - учитель ненадолго задумался, - и многозадачность, и многопоточность, и race conditions.
Busy waiting thread & Sleeping thread by marinka
Если твоя сестра заняла такой важный совместно используемый ресурс как ванная и не выходит оттуда уже полтора часа, то у тебя есть два варианта:
1. каждые три минуты стучать в дверь, взывая к ее спящей совести (активно ожидающий поток)
2. расслабиться и подождать, пока сестра выйдет сама (пассивно ожидающий поток).
PS: Если вы думаете, что данный пример не подходит, потому что стук в дверь ванной может как-то ускорить ее освобождение, то вы просто не знаете сестер ;)
Thread Pool by unnamed_ages
Пул потоков - это флотилия (пул) действующих пограничных кораблей (потоков), у каждый корабля есть зона контролируемого пространства. Количество кораблей равно необходимому количеству для полного покрытия пограничной зоны при движении кораблей с интервалом (сумма зон видимости) + несколько на случай выхода из строя (критическая ошибка) одного из основных (для экстренной замены), т.к. быстро ввести в эксплуатацию законсервированный корабль (создать поток) проблематично.
Context Switching by rus-and
Остап Бендер ведет сеанс одновременной игры, переходя от одного шахматного стола к другому - меняет контекст.
При этом информация о контекстах при переключении сохраняется - как говорится, "У меня все ходы записаны!".
И, конечно же, отдельного упоминания стоят две «комплексные» работы по мотивам кино- и литературной классики. Это объяснения Александра Галкина по мотивам рассказов А. Конандойля и видеоролик, подготовленный dovgaluk:
И еще раз спасибо всем-всем, кто принял участие в конкурсе! Ваши замечания и предложения, как обычно, приветствуются у нас в форуме. То, чего нельзя говорить на форуме, можно написать мне лично – Dmitry.Oganezov в домене Intel.com.


Комментарии
Ну и когда же будут результаты? )
Сегодня уже 5-ое августа, 22:12.
http://software.intel.com/ru-ru/blogs/2009/08/05/v20-2/