Каталог
Оптимизация ядраХотя самыми заметными усовершенствованиями у процессора Barcelona являются изменения SSE128, это только видимая часть айсберга. Предварительный список усовершенствований у Barcelona начинается с предсказателя переходов. Вообще, точность предсказания переходов у процессора определяет его конструкцию, как в "длину", так и в "ширину". Среднее число правильно предсказанных команд определяет, сколько команд можно иметь "в работе", что, в свою очередь, определяет число исполнительных блоков, которые обычно можно обеспечить работой. Предсказатель переходов у K8 довольно хороший, и он очень хорошо оптимизирован для его архитектуры, но у процессоров Pentium M и Pentium 4 AMD может позаимствовать некоторые алгоритмы, которые могут пойти на пользу их новому процессору. В Barcelona добавлен предсказатель непрямых переходов с 512 входами, который, поверим на слово, может предсказывать непрямые переходы. Непрямая ветка – та у которой адресат перехода задается адресом в памяти, другими словами, переход с многими адресатами. Вместо того чтобы направить переход непосредственно к метке, заданной командой перехода, непрямой переход отсылает CPU к ячейке памяти с адресом команды, к которой он должен перейти. Intel добавила предсказатель непрямых переходов в свой Pentium M. Идея следующая – чем сильнее вы ограничите количество неправильно предсказанных переходов, тем более эффективным будет процессор (понизится энергопотребление). Предсказатель непрямых переходов также был задействован в Prescott, чтобы минимизировать отставание в производительности, вызванное дальнейшим наращиванием конвейеров в архитектуре NetBurst. Для Prescott это дало более чем 12% сокращение числа неправильно предсказанных переходов в тесте SPEC CPU2000. Хотя в деталях отличия алгоритмов предсказаний AMD и Intel не известны, можно предположить, что у обеих компаний будут похожие большие улучшения в тех сценариях, где непрямые переходы широко применимы. В 253.perlbmk тесте SPEC CPU2000 уменьшение неправильно предсказанных переходов у Prescott было ощутимое – почти 55%. В случае с Barcelona, меньшее количество неправильно предсказанных ветвлений означает большее количество выполненных операций на такт и лучшую эффективность, как по энергопотреблению, так и по быстродействию. Введение предсказателя непрямых переходов было не единственным усовершенствованием предсказателя будущего у Barcelona – размер стека возврата в новом ядре в 2 раза больше, чем у K8. В очень длинных цепочках запросов, например, когда код вызывает много подпрограмм (например, рекурсивные функции), CPU может не хватить места для записи начального адреса. Если он потеряет цепочку адресов возврата, он не сможет предсказывать переходы, связанные с этими адресами. Удваивая размер стека возврата, Barcelona уменьшает вероятность возникновения подобной ситуации. Такого рода усовершенствования обычно необходимы для отслеживания работы программ, используемых изготовителями CPU, поэтому журналисты поинтересовались, какое программное обеспечение или сценарий сподвигли на это усовершенствование в Barcelona. Представители AMD не дали конкретного примера, когда это нужно, а только сказали, что стек возврата был увеличен по заказу "большой софтверной компании". Последнее улучшение, по сравнению с ветвями предсказаний у K8, сделано обычным образом – Barcelona отслеживает больше переходов, чем он. В предсказании ветвлений нет никакой мистики; процессор просто отслеживает сделанные переходы и, сравнивая их с тем, что уже было, предсказывает их дальнейший ход. Чем больше собрано информации о прошлых переходах, тем точнее предсказание. K8 разрабатывался для 130 нм техпроцесса, а первый вариант Barcelona будет сделан по 65 нм технологии, поэтому у AMD явно достаточно места на кристалле, чтобы собрать больше информации о переходах. [N5-Sideband Stack Optimizer] У самого первого Pentium M Intel ввела механизм, который она назвала "dedicated stack manager" – специальный диспетчер стека. В соответствии со своим названием, он предназначен для работы со всеми стековыми операциями x86 стека (запись в стек, извлечение из стека, запрос, возврат). Задача диспетчера стека в том, чтобы хранить в коде те операции стека, которые часто используются для вызова функций, отделяя их от остального потока x86 команд, посылаемых в CPU. Специализированный диспетчер стека будет заниматься декодированием и "выполнять" эти команды, чтобы они не забивали декодеры процессора и исполнительные блоки в конвейере. Intel, по существу, "расширила" ядро, выгрузив некоторые операции, чтобы дистанцировать аппаратные цепи. В Barcelona AMD вводит похожую технологию, которую они назвали Sideband Stack Optimizer. Команды стека больше не идут через 3-путный декодер и стековые операции больше не прогоняются через исполнительные блоки, что эффективно расширяет Barcelona при минимальном удорожании. Sideband Stack Optimizer, как и интеловский dedicated stack manager, имеет собственный сумматор, который обрабатывает все операции стека. Это небольшое дополнение может помочь увеличить общую производительность процессора и одно из тех, которое должно пойти AMD на пользу. Более быстрая загрузкаСравнивая производительность Athlon 64 и Core 2, легко понять, почему у Intel большое преимущество в производительности в приложениях, широко использующих SSE. А как насчет приложений, таких как игры и бизнес-приложения, которые должны выигрывать от интегрированного на кристалле контроллера памяти AMD? Или для того, чтобы обойти Athlon по быстродействию, Core 2 достаточно лишь большего L2 кэша и агрессивной предвыборки? Одним из главных преимуществ микроархитектуры Core является возможность разрешать командам загрузки обходить предыдущие команды загрузки и выгрузки. В среднем около 1/3 всех команд программы заканчивается их загрузкой, поэтому, если вы можете увеличить скорость загрузки, вы, как правило, можете очень сильно увеличить скорость работы приложения. Чтобы не ждать доступа к памяти, отнимающего много рабочих тактов, в микроархитектуре Core можно изменить последовательность загрузок, если вы уверены, что команды, зависящие от этих загрузок, получат нужные им данные. Core позволяет также сдвинуть загрузки и установить из перед выгрузками, что раньше было невозможно, потому что более ранняя выгрузка могла аннулировать только что загруженные данные. В Intel полагают, что вероятность того, что выгрузка произойдет перед загрузкой, очень маленькая, порядка 1 - 2%, поэтому с достаточно точным предсказателем Вы можете точно предположить, когда это может произойти. Логика прогнозирования интеловских процессоров Core 2 может предсказывать, что у выгрузки и загрузки может быть один и тот же адрес памяти. В случае такого прогноза, меняется очередность команд и загрузке разрешается завершиться перед выгрузкой. В тех маловероятных случаях, когда предсказатель ошибется, загрузку придется проводить заново ценой сброса конвейера (подобно тому, как это происходит в случае ошибки предсказания перехода). У архитектуры K8 не было эквивалентной схемы, которая бы разрешала выполнение загрузки перед другими загрузками и выгрузками, поэтому даже без интегрированного на кристалле контроллера памяти Intel может выполнять некоторые операции с памятью быстрее, чем K8. У Barcelona эта проблема решена вводом схемы, почти идентичной той, что Intel сделала у процессоров Core 2. Теперь и Barcelona может менять очередность и ставить одни загрузки перед другими, точно так же, как это может Core 2. Также загрузка может выполняться перед другими выгрузками, при условии, что процессор знает, что эти две операции не используют один и тот же адрес памяти. В то время как для определения того, что выгрузка и загрузка конфликтуют, Intel использует предсказатель, AMD использует более консервативный подход. До принятия решения о том, что загрузка может быть осуществлена перед выгрузкой, Barcelona ждет, пока адрес выгрузки не будет вычислен. Работая по такой схеме, Barcelona никогда не ошибается и он не может получить штраф за неправильное предсказание. Инженеры AMD рассмотрели интеловский алгоритм работы предсказателя, и решили, что для их архитектуры он не даст прироста в быстродействии. AMD может вычислить до трех адресов выгрузки за такт, так как у неё имеется 3 блока расчета адресов (AGU - Address Generation Unit), по сравнению с одним блоком на выгрузку у Intel, так что у AMD больше вычислительных мощностей для вычисления адреса выгрузки ещё до того, как поставить загрузку перед выгрузкой. Улучшение во внеочередности загрузки у Barcelona должно быть даже более эффективным, чем у Core 2, при том, что раньше AMD не могла делать никаких перестановок загрузок до Int/FP шедулеров, тогда как Core Duo мог производить ограниченное число перестановок. [N6-Другие изменения] Буферы трансляции-просмотра Translation Lookaside Buffer (TLB) используются для кэширования карты виртуальных адресов распределения физической памяти системы. Частота успешных обращений к TLB обычно весьма высокая, но, по мере того как программы становятся все больше и им нужно всё больше памяти, конструкторам процессоров приходится подгонять под них и объемы TLB. У K8 TLB больше, чем у K7, и с Barcelona AMD придется проделать то же самое. TLB у Barcelona немного больше, чем у K8, но они поддерживают 1G страницы, которые нужны для баз данных и виртуализации нагрузки. У Barcelona AMD также сделала 128 входов 2M L2 TLB, что также помогает при работе с новыми программами, для которых нужны большие page файлы. Усовершенствования TLB у Barcelona не будут заметны при работе с настольными приложениями, но производительность в корпоративном использовании должна увеличиться в серверных приложениях, для которых нужны большие объемы памяти. Когда Intel выпустила свой второй Pentium M, под кодовым названием Dothan, одним из улучшений у него была меньшая задержка при делении целых чисел. Хотя сейчас подробности неизвестны, но AMD заявляет, что у Barcelona аналогичная задержка тоже уменьшена. Нельзя сказать, чем эти изменения похожи на то, что сделала Intel у Dothan, но, по-видимому, это усовершенствование не может сильно повлиять на скорость работы с обычными приложениями. Это одно из тех изменений, которое внесет вклад в увеличение общего быстродействия, но оно не из тех, что могут удвоить скорость работы с числами вообще. В другой попытке эффективно "расширить" Barcelona без существенного увеличения количества транзисторов, AMD перевела несколько команд в микрокоды и сделала их fastpath-инструкциями. Такие команды могут пройти через fastpath-декодер ядра значительно быстрее, чем происходит декодирование обычных микрокоманд. Команды CALL и RET-Imm теперь являются fastpath-командами, что является частью улучшения оптимизации байпасного стека (sideband stack optimization) Barcelona. Команды MOV из SSE регистров в целочисленные регистры также являются fastpath-командами. Говоря о командах, стоит сказать, что в Barcelona AMD также ввела несколько новых расширений для своей технологии ISA. Введены две новых команды для работы с битами: LZCNT и POPCNT. Leading Zero Count (LZCNT) считает число первых нулей операции, а Pop Count считает количество первых единиц. Обе эти команды предназначаются для приложений шифрования. AMD также вводит 4 новых SSE расширения: EXTRQ/INSERTQ, MOVNTSD/MOVNTSS. Первые два расширения – это маскирование и сдвиг, объединенные в одну команду, две последние – скалярная потоковая выгрузка (потоковая выгрузка, которая может быть применена к скалярным операндам). Некоторые из этих команд можно увидеть у Penryn и у других будущих процессоров Intel. [N7-Более быстрый контроллер памяти] С тех пор как AMD перенесла контроллер памяти на кристалл, она у каждого своего нового процессора делает его всё более совершенным. У Barcelona изменения значительные, и это должно существенно улучшить скорость работы памяти. Одной из сильных сторон интеловской архитектуры FB-DIMM, используемой в серверах Xeon, является возможность одновременной записи и чтения в/из буфера. Со стандартной памятью DDR2 можно делать только первое или второе, и вы теряете темп при переключении с одной операции на другую. Если у вас эти события происходят случайным образом, на это тратится много времени, чего бы не было, если бы сначала выполнялись все операции чтения, а после переключения – запись. Контроллер памяти K8 старается сначала произвести чтение, так как на это нужно меньше времени, но у Barcelona контроллер памяти более интеллектуальный. Теперь, вместо того чтобы произвести запись сразу же по приходу этой команды, они записываются в буфер, и как только буфер заполнится до заданного порога, контроллер выполнит подряд все эти операции. Таким образом, сокращаются задержки на переключение чтение/запись, что помогает увеличить пропускную способность и уменьшить задержки. У ядра K8 (Socket-940/939/AM2) один контроллер памяти с 128 битной шиной, а у Barcelona AMD разделила контроллер DRAM на два отдельных 64-битных контроллера. Каждым контроллером можно управлять независимо, поэтому мы получаем некоторое увеличение быстродействия, особенно при задействовании 4 ядер, когда каждое ядро работает со своим потоком данных и своим массивом ячеек памяти. Северный мост Barcelona также сделан так, чтобы обеспечивать более высокую пропускную способность, чем была раньше. У него более объемные буферы, что позволяет поддерживать более высокую пропускную способность, и северный мост уже подготовлен для работы с будущими технологиями памяти (например, DDR3). По-видимому, AMD переключит Barcelona на новую память только после выхода одной или двух модификаций процессора, а пока новое ядро дебютирует с поддержкой DDR2. [N8-Новый блок предвыборки] Предвыборка осуществляется многими компонентами системы и во многих алгоритмах. Когда NVIDIA выпустила чипсет nForce2, он поразил тем, что мог делать интеллектуальную предвыборку при работе с очень широкой, на то время, 128-битной шиной памяти. Позже, с выходом процессоров Core 2, его 3 блока предвыборки на ядро позволили значительного уменьшить задержки при работе с памятью. Ядро K8 имеет 2 блока предвыборки на ядро – один для команд, и один для данных. Ядро Barcelona имеет столько же блоков предвыборки, но они улучшены. Самое большое изменение – блок предвыборки данных теперь переносит данные прямо в L1 кэш данных, а не в L2 кэш, как у K8. AMD изучила точность работы блоков предвыборки, и пришла к выводу, что они работают довольно хорошо, поэтому имеет смысл делать предвыборку только в быстром L1 кэше и не засорять L2 кэш. AMD также увеличила гибкость своего блока предвыборки команд L1 кэша, чтобы он мог обрабатывать 2 предстоящих запроса по любому адресу. На первый взгляд, предвыборка Intel у Core 2 солиднее, по крайней мере, блоков предвыборки у этих процессоров больше, чем даже AMD планирует для Barcelona. Напомним, что у Core 2 у каждого ядра 2 блока предвыборки данных и 1 блок предвыборки команд, плюс 2 дополнительных блока предвыборки в L2 кэше, и все они хорошо контролируются, чтобы они не злоупотребляли запросами. В то же время нужно иметь в виду, что Intel эти предвыборки нужны для маскировки более длинного пути до оперативной памяти. Если говорить о перспективах CPU, преимущество здесь у Intel, но, говоря о платформе в целом, здесь трудно отдать кому-нибудь предпочтение. Каждое ядро Barcelona имеет свой набор блоков предвыборки команд, но главное его усовершенствование в том, что теперь у него есть новый блок предвыборки – блок предвыборки DRAM. Расположенное в контроллере памяти, где раньше у AMD никогда не было подобного блока логики, новый блок предвыборки DRAM просматривает все запросы к памяти и старается извлечь из неё данные, которые, по его мнению, понадобятся в будущем. Так как этот блок предвыборки помогае |
Источник: www.anandtech.com/