AMD Bulldozer
Процессоры нового поколения
Появление новых процессоров AMD Bulldozer (можно просто "Бульдозер") прошло не слишком удачно. Комментаторы и обозреватели с сарказмом относятся к новому продукту. Тесты же показывают отсутствие какого бы то ни было увеличения эффективности по сравнению с предыдущей К10 архитектурой в расчете на единичное ядро. Столь ожидаемая архитектура AMD процессоров вызвала массовое разочарование. И наверно зря. Никто почему-то не отметил главное: архитектура процессорных систем AMD основана на совершенно новом способе повышения производительности.
Для понимания сути произошедших революционных изменений архитектуры нового AMD процессора, необходимо абстрагироваться от результатов одного конкретных тестов. Ведь технология действительно сырая, однако не стоит торопиться и выбрасывать с водой младенца: не забываем, что главное здесь - концепция.
Проанализируем блок-схему новых AMD процессоров. Сразу бросается в глаза, что архитектура ориентирована на связное выполнение 2-х зависимых вычислительных процессов.
Вспомните, что раньше боролись за производительность тремя основными способами: наращивали число ядер в процессоре, увеличивали число команд, которые выполняются за единичный такт, либо увеличивали тактовую частоту, что неминуемо упиралось в тепловой пакет 130-150 Ватт.
Разработчики "Бульдозера" двинулся иным путём. Повышается производительность теперь благодаря многопоточной обработке команд. Появилось новое понятие: "тесно связанные между собой вычислительные ядра", либо, более понятно, "процессорный модуль".
На этом месте остановимся подробнее.
Задача повышения эффективности взаимодействия между процессорами до сегодняшнего дня была обделена вниманием; системы межпроцессорных прерываний не менялись вот уже на протяжении трех десятилетий. За такой большой срок многое изменилось, и главное, за что пока не брались разработчики микропроцессорных архитектур, - совмещение на кристалле нескольких ядер. Становится просто смешно, хоть процессоры и находятся на одном кристалле, связь между ними ведется по внешней шине, а также по устаревшему протоколу...
Программисты тоже халтурят, изобретая различные способы облегчения жизни, тогда как эффективность самих вычислительных процессов падает катастрофически. Почему "творения" программистов даже на новейших суперскоростных процессорах сильно тормозят? Все очень просто, оптимальные алгоритмы процессов вычисления изменены ради удобства поточной индустрии программирования.
Базовые технологии производства программного продукта сегодня это - универсальные виртуальные машины и объектное программирование.
В результате такой индустриализации мы пришли к использованию методов связывания объектов во время исполнения кода в среде интерпретаторов. Таким образом, получается, что функции компилятора фактически переносятся в среду исполнения кода. Все, что раньше выполнялось один раз во время компиляции дистрибутива, теперь исполняется каждый раз, когда программа работает у конечного пользователя.
Но не пугайтесь, не все так плохо. Сегодня весь типовой вычислительный поток содержит в себе два компонента: функции компилятора, а также собственно рабочее тело программы. Таким образом, поток должен быть разбит на 2 тесно связанных между собой потока, параллельно выполняемых на различных процессорах. А вот здесь проблема: пока что архитектура межпроцессорных взаимодействий не позволяет такого.
Как можно решить эту проблему? Достаточно просто: существуют связанные вычислительные потоки, следовательно, по аналогии, необходимо создать тесно связанные между собой вычислительные ядра, чтобы их эффективно обрабатывать. И Бульдозер сделал первый шаг в этом направлении.
Не так давно появилась другая область вычислительных задач, в которой также используются тесно связанные между собой вычислительные потоки, - это виртуализация. Здесь применяются связанные вычислительные потоки "хост-задача".
Давно уже поднимаемая учеными тема спекулятивного выполнения кода принципиально сводится к параллельному функционированию нескольких тесно связанных между собой вычислительных потоков. Как утверждают теоретики, использование этого метода поможет выйти на небывалые уровни производительности в тех системах, которые обладают избытком аппаратных ресурсов.
В общем, пришло время учить аппаратуру работе со связными вычислительными потоками. Этот революционный путь обеспечит существенное повышение эффективности вычислений. Программисты же должны научиться распараллеливать код на несколько тесно связанных потоков.
И так подводим итоги. Существует устаревшая технология взаимодействия между процессорами. Программисты же явно и неявно стараются использовать связные между собой вычислительные потоки. И чего нам не хватает для "энергоэффективного" счастья? "Бульдозера", который расчистит все это под новенькую площадку для революционной процессорной архитектуры.
Конечно, современное программное обеспечение не в состоянии реализовывать весь потенциал архитектуры "Бульдозера". Применение зависимых процессорных модулей при независимости вычислительных потоках будет лишь ухудшать результирующую производительность системы. Однако уже анонсировано, что данная архитектура будет поддерживаться в Windows8, что даст, согласно предварительным оценкам экспертов, более пятнадцати процентов прироста производительности. И этого всего лишь при элементарной оптимизации уровня диспетчера потоков ОС. Представьте, что будет, если под эту архитектуру заточить виртуальные машины, компиляторы. К указанным процентам можно будет смело приписывать дополнительный ноль!
Кто-то может посчитать, что это утверждение чересчур оптимистично, Однако, принимая во внимание, что, например, для связывания на этапе выполнения необходимо сначала осуществить просмотр таблиц связи и лишь затем вычисления адреса процедуры, то разделение процессов выполнения и связывания как раз таки повышает быстродействие не менее чем в 2 раза.
К слову горя, в эпоху становления архитектуры К10 ходили слухи, что AMD планирует внедрить многопоточность в ядро, причём эта предполагаемая технология называлась красноречиво "антигипертрединг" (англ. Anti HyperThreading). Сейчас понятно, почему. К сожалению, на тот момент эта концепция окончательно не созрела, сейчас же её время пришло.
Чтобы реализовать все имеющиеся преимущества архитектуры "Бульдозера" одной оптимизации недостаточно, для тонкого управления аппаратурой нужны также специализированные системные команды. Потребуется также дополнительная аппаратура, но это может подождать "строительных машинах", которые собирается выпускать AMD каждый год, пока же достаточно и того, что уже сделано. Хорошо, если удастся внедрить оптимизацию для общих кэшей процессорного модуля - этого будет более чем достаточно для начала.
Загадкой остается лишь одно: предполагали ли авторы данной архитектуры изначально такого рода использование своего детища, или все-таки это получилось случайно? Как Колумб, плывший в Индию, а открывший Америку?
Время покажет. Пока же логика, да и интуиция подсказывают, что AMD и ее разработку ”Бульдозер” ждет великое будущее.