Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #55, ИЮНЬ 2005 г.

Больше ядер, хороших и разных

Сергей Мишко (msn@univ.kiev.ua)

Спецвыпуск: Хакер, номер #055, стр. 055-030-1


Все о многоядерных процессорах

Свершилось! То, о чем так много говорили в последнее время, стало реальностью: непримиримые конкуренты Intel и AMD практически одновременно явили миру свои первые процессоры с двумя ядрами. Чем не повод поразмышлять над будущим развития этих процессоров, отталкиваясь от настоящего?

Наверное, не нужно долго объяснять, зачем гиганты процессорной индустрии решили осуществить переход к архитектурам с несколькими ядрами: в некоторых случаях параллельные вычисления способны существенно ускорить быстродействие системы в целом, особенно если учесть многозадачный характер современных ОС. Вместе с тем вполне резонно может возникнуть вопрос: если многоядерные архитектуры так хороши, почему их внедрение не началось раньше? Ответив на этот вопрос, я спас себя от твоих вопросов о недостатках и преимуществах таких решений.

Все параллельно

Идея параллельных вычислений сама по себе не нова, и в том или ином виде она использовалась даже в самых первых ЭВМ. Опыт параллельного (читай – "совместного") решения задач знаком нам и из повседневной жизни, например, вместе вырыть яму получится намного быстрее, и спорить с этим никто не станет. Однако не любая вычислительная задача является параллельной по своей природе, а значит, использование параллельных вычислений будет оправданным далеко не всегда. Как показывают исследования, число задач, не требующих предварительной оптимизации, не превышает 10-20%.

Описанная проблема неизбежно подводит нас к еще одной проблеме параллельных вычислений - сложности всего, что с ними связано. Во-первых, требуется специальным образом оптимизировать ПО, для чего нужны очень непростые компиляторы и прочие инструменты для отслеживания возможных коллизий между параллельными потоками. Во-вторых, сама по себе усложняется архитектура вычислительных систем, а процесс программирования становится при этом еще более трудоемким.

Я намеренно начал раздел о параллельных вычислениях с перечисления связанных с ними проблем, чтобы показать, что они являются не панацеей от всех бед, а, чаще всего, единственным возможным выходом. Действительно, не будь у нас этой идеи, быстродействие самых мощных компьютеров на планете ограничивалось бы быстродействием самого быстрого процессора. Но есть и суперкомпьютеры, и распределенные вычисления, которые иногда объединяют многие тысячи одновременно работающих процессоров. На этом фоне использование процессоров с несколькими ядрами на одном кристалле кажется вполне оправданным.

Долгая дорога в дюнах

Надо ли говорить, какой долгий путь пришлось проделать производителям процессоров, прежде чем начались разговоры о продуктах с двумя ядрами. Наверное, первой попыткой привнести параллелизм в х86-процессоры стало появление конвейерной обработки команд в 486 чипах. Это позволило процессорам сократить время выполнения одной инструкции до одного такта.

Скоро идея конвейерных вычислений получила свое логическое продолжение: появились суперскалярные процессоры с несколькими конвейерами, причем одни из них оперировали исключительно с целыми числами, другие только с вещественными. В результате процессоры стали выполнять более одной инструкции за такт. Первым х86-процессором на базе суперскалярной архитектуры стал Pentium.

Содержание  Вперед на стр. 055-030-2