С выходом AMD Opteron появились 64-разрядные процессоры, превосходящие по производительности почти все RISC-процессоры, за исключением Power4+ и Alpha 21364 (и то лишь для вычислений с плавающей точкой), но стоящие в несколько раз меньше.

Появление Opteron заставило задуматься над тем, рационально ли платить большие деньги за «традиционные» дорогие SMP-серверы
На фоне RISC-процессоров, а также Intel Itanium 2, (Здесь и далее имеется в виду 0,18-микронная версия, известная под кодовым названием McKinley. О 0,13-микронных Itanium 2 (проект Madison) читайте в следующих номерах Computerworld Россия. — Прим. ред.) 64-разрядный процессор AMD впечатляет своим соотношением цена/производительность. Подобного, наверное, ожидали от Itanium, правда, возможно, больше за счет роста производительности. Однако такой революции архитектура IA-64 пока не совершила.

Заказчики, которым реально требовались не 64-разрядные вычисления, а лишь производительность, стали все активнее применять SMP-серверы на базе Intel Xeon и AMD Athlon MP. Появление Opteron заставило задуматься над тем, рационально ли, зачем платить большие деньги за «традиционные» дорогие SMP-серверы. Таким образом, Opteron становится конкурентом Xeon для коммерческих и научно-технических приложений.

При этом, честно говоря, я с большим скептицизмом отношусь как к самой архитектуре x86/IA-32, так и к ее расширению, ныне именуемому AMD64. То, что эта CISC-архитектура, обеспечивающая совместимость с древними ПК, стала тормозом на пути увеличения производительности, стало общим местом. В этом смысле появление IA-64 было гораздо более революционным событием.

Об архитектуре и микроархитектуре

Itanium был принципиально новой разработкой Intel. В отличие от него Opteron с точки зрения архитектуры и даже микроархитектуры для AMD таковым не стал — многое в процессоре унаследовано от Athlon. Расширения архитектуры обусловлены в основном увеличением до 64 бит разрядности регистров общего назначения; введением 64-разрядной виртуальной адресации с применением плоского (flat) адресного пространства, общего для кодов, стека и данных; введением 64-разрядного счетчика команд и адресации относительно него, а также добавлением восьми новых регистров общего назначения и восьми новых регистров SSE (XMM) при полной поддержке SSE и SSE2. Фактически в Opteron реализованы 48-разрядные виртуальные адреса и 40-разрядные физические адреса.

Opteron может работать в 32-разрядном режиме х86, обеспечивая совместимость с существующими кодами (включая поддержку SSE2), но, в отличие от Itanium, с высокой производительностью. Более того, 64-разрядная ОС может одновременно выполнять как 64-разрядные, так и 32-разрядные приложения.

Отмечу, что 64-разрядный режим сам по себе не вызывает увеличения производительности. Более того, очевидно, что умножение 64-разрядных чисел, к примеру, требует больше затрат, чем 32-разрядных. Увеличение производительности Opteron в этом режиме может быть связано с использованием большего числа доступных регистров. Кроме того, могут выиграть в производительности приложения, требующие значительного объема оперативной памяти для реализации более эффективных алгоритмов.

Некоторые компоненты микроархитектуры Opteron также унаследованы от Athlon, что позволило уменьшить стоимость разработки. Кэш-память первого уровня является двухканальной наборно-ассоциативной, кэши данных и инструкций имеют емкость по 64 Кбайт (как и в Athlon XP). Для сравнения: в Itanium 2 и Pentium 4 аналогичный кэш является четырехканальным наборно-ассоциативным с емкостью 16 и 8 Кбайт соответственно, в Power4 — двухканальным, наборно-ассоциативным, объемом 32 Кбайт.

Кэш данных первого уровня в Opteron разделен на восемь банков по 8 байт и имеет два 64-разрядных порта, допуская две одновременные операции чтения/записи в любой смеси. В Pentium 4 кэш данных первого уровня может выполнять одновременно одно чтение и одну запись, в Itanium 2 — по две операции чтения и записи. В Opteron, как и в Athlon MP, поддерживается протокол согласованного кэширования MOESI. Однако задержка при обращении в кэш данных первого уровня у Opteron и Athlon равна трем тактам, в то время как у Pentium 4 — двум, а у Itanium 2 — одному.

Слабым местом Athlon по сравнению с Pentium 4 является пропускная способность кэш-памяти второго уровня, работающей на частоте процессора, но соединенного с ядром 64-разрядной шиной (против 256 бит в Pentium 4). В Opteron скорость ее работы возросла вдвое, но все равно по этому параметру, скажем, Opteron 1,8 ГГц уступает Pentium 4 3,06 ГГц почти в три раза. Если приложение «ложится» в кэш второго уровня или может эффективно обрабатываться в нем «поблочно», микроархитектура Pentium 4 (и Itanium 2) оказывается гораздо эффективнее.

Наши измерения подтвердили данные о том, что задержка при обращении в кэш второго уровня у Opteron составляет 16 тактов против 20 у Athlon XP. В Itanium 2 задержка равна пяти-шести тактам, в Pentium 4 и Xeon — 27 и 29 тактам соответственно. Емкость кэш-памяти второго уровня у Opteron равна 1 Мбайт, а сам кэш является 16-канальным наборно-ассоциативным. У нынешних Pentium 4 кэш второго уровня имеет емкость 512 Кбайт, у Itanium 2 — 256 Кбайт (8-канальные наборно-ассоциативные в обоих случаях). Itanium 2 и Xeon MP комплектуются также кэш-памятью третьего уровня.

В Opteron кэш второго уровня имеет исключающую архитектуру. Это означает, что данные в него могут попасть только из кэша данных первого уровня в случае, когда из последнего требуется удалить какую-либо строку для замены. Соответственно кэш данных первого уровня использует стратегию обратной, а не прямой записи. Преимуществом такого подхода в AMD считают увеличение емкости кэша, но при емкости в 1 Мбайт это не так уж важно.

По сравнению с Athlon XP в Opteron имеется ряд усовершенствований в буферах быстрой переадресации (TLB). Вдвое больше, чем у Athlon XP, емкость TLB инструкций L1 и TLB второго уровня. TLB L1 является полностью ассоциативным, TLB L2 — четырехканальным наборно-ассоциативным. Эффективность замены данных в TLB при переключении задач повышена в Opteron за счет применения специального «фильтра поджога», позволяя нескольким процессам разделять TLB (без замедляющего работу вмешательства ПО).

Микро- и макрооперации

В AMD стремились уменьшить стоимость разработки Opteron (поэтому некоторые блоки «взяты» из Athlon), по возможности не увеличивать площадь и, соответственно, стоимость процессора, а также обеспечить дальнейший рост тактовой частоты по сравнению с Athlon. Из-за этого конвейер был удлинен всего на две стадии по сравнению с Athlon — до 12 стадий.

Это очень далеко от 20 стадий Pentium 4, меньше, чем в Power4 (15 стадий), но больше, чем в Itanium 2 (8 стадий). Это относится к целочисленному конвейеру, длина конвейера для операций с данными в формате с плавающей точкой в Opteron — 17 тактов.

Интересно, что обе дополнительные стадии были добавлены во фронтальную часть конвейера. Как и в Pentium 4, данная часть конвейера отделена от «исполнительной» части, хотя реализовано это по-другому.

Формально «архитектурные» команды перекодируются в RISC-подобные микрооперации. Таким образом, во фронтальной части Opteron является суперскалярным процессором, способным выбирать, декодировать и отправлять на выполнение одновременно до трех команд AMD64, используя устройство управления командами (ICU).

На самом деле устройство выборки/декодирования преобразует команды AMD64 сначала в так называемые макрооперации. При этом применяются декодеры двух типов: DirectPath («прямое перекодирование») и VectorPath (для сложных команд AMD64, с использованием заранее заготовленных последовательностей операций). Управляя буфером переупорядочения (ROB) и планировщиками (см. ниже), ICU отвечает за диспетчеризацию макроопераций и их высвобождение из ROB по окончании выполнения. ICU берет из декодеров три макрооперации за такт, помещает их в ROB (емкостью 24 строки) и отслеживает выполнение «на лету» соответственно до 72 макроопераций. Для окончательного их декодирования в микрооперации и последующего выполнения ICU берет макрооперации из ROB и распределяет их в планировщики. Тот факт, что CISC-команды AMD64 преобразуются в микрооперации и что именно в эту часть конвейера понадобилось добавлять ступени декодирования, свидетельствует о преимуществе RISC перед CISC (по производительности).

Предварительное декодирование начинается при выборке: в кэш инструкций записываются уже результаты этого декодирования. Логика выборки одновременно с кэшем инструкций обращается к блоку предсказания переходов, который включает три структуры: буфер адресов в командах перехода (BTB), счетчики глобальной истории переходов (GHBC) и стек адресов возврата (RAS).

Замечу, что Opteron в этой части ушел вперед по сравнению с Athlon. В случае если предсказание верно, дополнительная задержка равна одному такту, а если нет, потребуется еще 10 тактов. BTB, кэширующий адреса переходов, имеет емкость 2048 строк, а GHBC содержит 16384 двухразрядных счетчиков (гораздо больше, чем в Athlon) и работает с восемью последними условными переходами. Когда выбирается команда вызова подпрограммы, следующий счетчик команд «проталкивается» в стек RAS, а переход с возвратом берет адрес возврата из верхушки стека.

Целочисленный планировщик имеет три очереди, содержащие по шесть макроопераций. Последние преобразуются в микрооперации — целочисленные и генерации адреса, затем направляются соответственно в целочисленное АЛУ или устройство генерации адреса AGU. В Opteron имеется три почти одинаковые пары (AЛУ, AGU). Почти так, как, например, только один целочисленный конвейер обрабатывает умножение.

Микрооперации передаются на выполнение, как только становятся доступными их операнды, то есть части одной макрооперации могут выполняться во внеочередном порядке; одновременно могут выполняться также 2 микрооперации из разных макроопераций (одна в АЛУ, другая в AGU).

Планировщик команд с плавающей точкой имеет буфер на 36 макроопераций, воспринимая за такт три макрооперации в любой смеси (x87, MMX, SSE, SSE2, 3DNow!). Он производит переименование регистров (используя файл из 120 физических регистров) и осуществляет суперскалярное выполнение микрокоманд в трех функциональных устройствах — сумматоре, умножителе и устройстве загрузки и сохранения регистров.

Таким образом, Opteron может выдавать на выполнение до девяти микроопераций за такт (против шести в Pentium 4). В планировщике реализована известная техника, которую AMD именует как superforwarding — при зависимости микроопераций по регистрам результат работы одной из операций напрямую отправляется в другую.

Куда делся Северный мост?

На основе Opteron могут строиться многопроцессорные системы, в которых обеспечивается почти однородный доступ к оперативной памяти
Ответ: его обрезали, расширили и «спрятали» внутри процессора. Обрезали, упразднив встроенную поддержку графики. Расширили, добавив поддержку подсистемы ввода/вывода (I/O). Спрятали — потому что интеграция в процессоре контроллера памяти уменьшает задержку доступа к ней. Теоретически задержка должна уменьшаться с ростом тактовой частоты. Контроллер памяти в Opteron поддерживает DDR200, DDR266 и DDR333 с DRAM-устройствами шириной 4, 8 и 16 бит. Допускается применение шины памяти шириной 64 или 128 бит (одно- и двухканальная память соответственно). Один процессор поддерживает до восьми модулей DIMM объемом до 4 Гбайт. Контроллер памяти разделен на две части — МСТ и DCT. При этом только DCT зависит от конкретного типа DDR.

С ростом числа процессоров (до восьми) растет преимущество Opteron перед Xeon MP в скорости за счет независимых каналов от процессоров к устройствам памяти. Запрос на обращение к памяти проходит через очередь SRQ и коммутатор XBAR, который направляет запрос либо в свой контроллер памяти, либо через канал HyperTransport в коммутатор другого процессора.

Каналы HyperTransport обеспечивают соединения «точка-точка» с низкой задержкой и могут иметь разрядность до 32 бит. Применение технологии HyperTransport является «изюминкой» Opteron, обеспечивая рост пропускной способности подсистемы ввода/вывода.

Надежнее и быстрее

Для обеспечения надежности в Opteron применяется так называемая Machine Check Architecture, которая включает, в частности, защиту кэша данных первого уровня, кэша второго уровня и каналов HT кодами ECC, а кэш инструкций первого уровня — битами четности. Регистровая DRAM защищена кодами ЕСС, причем поддерживается и технология Chipkill.

Согласно документации AMD, в процессор встроен термодатчик с тремя температурными порогами. При превышении первого информируется ОС, при превышении последнего происходит аварийное отключение процессора. Opteron производится с применением SOI-технологии с типоразмером 0,13 мкм. Он содержит около 106 млн. транзисторов и имеет площадь около 190 кв. мм. Энергопотребление Opteron не превышает 85 Вт. Opteron устанавливается в разъем Socket 940 и имеет на сегодня версии с тактовыми частотами от 1,4 до 2 ГГц.

Чипсетов и материнских плат под Opteron пока по-прежнему немного. С выходом набора системной логики nVidia nForce3 к платам Tyan Thunder K8X, MSI K8D Master и RioWorks HDAMA (использовалась в наших тестах) прибавилась еще и ASUS SK8N. О своих планах по выпуску систем на базе Opteron объявили такие гранды, как IBM и Cray.

В доступности для Opteron имеются математические библиотеки (Atlas, а также собственная библиотека AMD) и оптимизирующие компиляторы: кроме бесплатных GCC и сильно усовершенствованного g77 появляются трансляторы от Portland Group, Absoft и др. Наконец, работает обычное 32-разрядное ПО, в том числе компиляторы Intel.

Ядро Linux 2.4 и другие компоненты этой ОС уже умеют работать с Opteron в 64-разрядном режиме. Правда, некоторые дистрибутивы под Opteron разработаны в довольно дорогих вариантах, не предусматривающих их свободной загрузки по Internet. Появится и 64-разрядная версия Windows Server 2003 для AMD64.

На разработанных Джоном Маккалпином (ныне работающим в IBM) тестах STREAM наш Opteron достигал пропускной способности оперативной памяти

2,3-2,5 Гбайт/с, что в два с лишним раза больше, чем у Athlon MP 1800+ c близкой тактовой частотой (1533 МГц) и одноканальной DDR266. Конечно, Pentium 4 с FSB 800 МГц и двухканальной DDR400 будут далеко впереди. Однако известно, что у Pentium 4 в двухпроцессорных системах из-за конкуренции на системной шине параллельное выполнение двух нитей тестов STREAM немного снижает суммарную пропускную способность, в то время как на Opteron был достигнут ее рост примерно в 1,8 раза.

Наконец, в рамках проекта РФФИ 01-07-90072 нами была протестирована скорость работы Opteron 242 с 32-разрядными программами Gaussian-98 и Gamess-US, отличающимися высокими требованиями производительности с плавающей точкой и пропускной способности оперативной памяти, а также различным поведением с точки зрения локализации в кэше. В зависимости от метода расчета, на Opteron 242 эти программы по процессорному времени ускорились в 1,5-1,9 раза по сравнению с Athlon MP1800+ (на одном процессоре). При этом ускорение при распараллеливании программ на два процессора SMP-сервера для Opteron оказалось заметно выше, чем для Athlon MP.