Каталог
Bloomfield – отнюдь не новый ConroeЕсли сравнивать напрямую микроархитектуры Core 2 Duo и Pentium 4, можно сказать, что это буквально день и ночь. Процессоры Core не имеют почти ничего общего с NetBurst, все реализовано иначе. Для того чтобы по-настоящему воспользоваться преимуществами Pentium 4 и поучить полную отдачу от процессора, программистам требовалось проводить каждый раз огромную работу по оптимизации приложений. Однако мало кто будет специально затачивать код под аппаратную часть только одного производителя, пусть и самого крупного, если при этом на решениях конкурента скорость работы только снизится. В результате длинный конвейер P4 немалую толику времени просто простаивал, только нагревая воздух и потребляя лишнюю энергию. Инженеры усвоили урок, и Core был спроектирован так, чтобы программистам не требовалось переписывать заново огромные части программ, и уже существующий код работал быстро, причем преемственность сохранялась и для будущих архитектур. Эту традицию продолжает и Nehalem. Одной из фундаментальных характеристик для CPU служит возможность одновременного исполнения нескольких команд. Conroe стал первым процессором Intel, поддерживающим исполнение до четырех команд за единый такт. Зачастую такие возможности были даже избыточными, и не было никаких причин делать кардинальный редизайн ядра для того, чтобы расширить и без того беспроблемный участок. По такой здравой логике инженеры и поступили, оставив конвейер без существенных изменений: Приятной мелочью является расширение списка стандартных x86 микроопераций, которые могут быть объединены для совместного исполнения. Механизм такой работы чем-то напоминает MAD+MUL у NVIDIA, две команды декодируются и исполняются как одна, что в некоторых случаях позволяет существенно повысить скорость CPU. Так выглядит список пар команд, которые возможно объединить, добавленных к уже существующим в “старых” Core 2: Еще одним улучшением является то, что отныне вместе могут соединяться и 64-битные инструкции, когда ранее такая возможность была предусмотрена только в стандартном 32-битном режиме. Это вполне может дать прибавку скорости в вычислениях с удвоенной точностью. К сожалению, о количестве исполняемых команд за такт в 64-битном режиме ничего сказано не было. Видимо, как и ранее у Core2, вместо четырех полноценных команд Nehalem может обработать лишь три. Это не является серьезной проблемой, но, может создать условия для потерь производительности. [N4-Улучшения в Loop Stream Detection] Одним из блоков, благодаря которым Core 2 работает быстро, является Loop Stream Detector (LSD). Забавное название ничего общего с наркотиками не имеет, а означает всего-навсего невинное “обнаружение зацикленных потоков”. Эта логика контролирует исполняемый код, и, как только находится незавершающийся цикл без выхода, прерывает предсказание ветвлений, останавливая неправильные безрезультатные действия: В Nehalem LSD вынесли за пределы стандартных конвейерных операций, тем самым контроль над потоками осуществляется уже на основании хранящихся декодированных микроопераций, что эффективнее старого анализа еще закодированных данных. Также расширено и количество одновременно хранящихся строк кода, на основании которых LSD “делает выводы” – 28 декодированных микроопераций вместо 18 старых возможных инструкций: [N5-Блок предсказания ветвлений и серверная направленность Nehalem] Заметные изменения в Nehalem претерпела логика предсказания ветвлений. Отныне в процессоре данная структура представлена сложным двухуровневым механизмом. Фактически теперь иерархия этого блока похожа на организацию многоуровнего кэша современных CPU – самый быстрый и маленький – первого уровня, медленнее и больше – второго, и т.д. Причем даже значимые параметры в какой-то мере похожи на таковые у быстрой интегрированной памяти процессора – величина и скорость работы. Блок предсказания ветвлений второго уровня производит анализ по большим частям кода, чем основная логика первого уровня, однако при этом и работает медленнее. Нельзя не отметить и улучшения, коснувшиеся стек-буфера, также напрямую относящиеся к предсказанию ветвлений. Ранее при ошибках в предсказаниях, которые случались даже несмотря на сложные алгоритмы, в возвратный стек Penryn (структура, следящая за тем, в какой области памяти должно начаться исполнение после обработки функции) попадали неверные данные. Теперь же обновленный возвратный буфер стал интеллектуальнее и препятствует неверному заполнению данных, тем самым удается избежать лишних ошибок и простоя при неверном предсказании условных переходов. Следует заметить, что все вышеназванные усовершенствования направлены в первую очередь на улучшение работы процессора в тяжелых серверных приложениях (Intel приводит пример баз данных), где особо критичны неверное предсказание ветвлений или лишние исполненные такты, пропущенные блоком LSD. Дело в том, что уже с моменты выхода K8 позиции Intel в серверном сегменте не были однозначно убедительными, и если превосходство Core 2 в десктопном сегменте было неоспоримо, консервативные корпоративные пользователи продолжали доверять AMD, выбирая серверы на K10. Nehalem призван исправить такой порядок вещей, и, несмотря на то, что произведенные модернизации несомненно окажут положительный эффект на быстродействие процессора при выполнении стандартных “домашних” задач, продиктованы они были именно серверными нуждами. К слову, этот момент достаточно интересен. Ведь если вспомнить историю, в большинстве поколений изначально все нововведения делались с оглядкой на наиболее производительные серверные решения. Затем новинки переходили в разряд стандартов для десктопов. С Core же ситуация абсолютно иная, как мы уже говорили, истоки архитектуры восходят к Pentium M, т.е. серверные решения стали следствиями нововведений в мобильной сфере. Теперь все снова возвращается “на круги своя” и серверный Nehalem становится законодателем мод для обычных ПК. Немаловажным достоинством архитектуры Nehalem является неукоснительное следование инженерами Intel золотому правилу соотношения производительности на ватт при проектировке CPU, которое они сами для себя же и установили при разработке Core. В цифрах выражается это правило просто – 1% рост энергопотребления должен соответствовать как минимум 2% повешения производительности. При этом если задуманное улучшение не соответствует таким пропорциям, от его введения либо полностью отказываются, либо кардинально перерабатывают. Правила жесткие, однако это позволяет избежать неконтролируемого роста потребляемой мощности при несоразмерном улучшении производительности, как в свое время было с Pentium 4 Prescott. [N6-Доработанная исполнительная логика] Что касается части ядра процессора, отвечающей за исполнение команд, как и в случае с конвейером серьезных изменений относительно Penryn сделано не было: Несмотря на отсутствие значимых качественных изменений, количественные имеют место. В частности увеличены размеры внутренних микро-буферов чипа и повышена “дальновидность ” планировщика внеочередного исполнения – отныне в Nehalem планируется 128 микроопераций вместо старых 96 в Conroe/Merom/Penryn. Расширены кэшы структур резервации (с 32 до 36), загрузки (с 32 до 48) и хранения (с 20 до 32 операций). Все названные изменения примерно аналогичны апгрейдам, произведенным AMD при переходе от K8 к K10 – никаких существенных доработок самой архитектуры, только лишь устранение относительно узких участков процесса проведения расчетов CPU. Это позволяет добиться эффективности Core, близкой к теоретической максимальной, да и действительно – зачем принципиально менять то, что и так отлично работает, особенно с учетом положения дел конкурента? [N7-Новый TLB, быстрый доступ к инструкцям в кэше с неопределенным размером] Исторически так сложилось, что именно серверные приложения, такие как уже упомянутые базы данных, по максимуму используют логику трансляции виртуальных адресов памяти в физические, что и является основной работой TLB. Вспоминая о серверной направленности Nehalem, мы не удивляемся, видя в списке нововведений обновленный юнит TLB. Помимо простого увеличения размеров буфера страниц первого уровня, инженеры Intel применили при модернизации TLB тот же прием, что и при улучшении блока предсказания ветвлений – “надстроили” второй унифицированный уровень Translation Lookaside Buffer, отвечающий и за данные, и за код. Еще одним потенциально существенным изменением является ускорение декодирования инструкций из кэша, размер которых не определен. Конечно, наибольший объем единого обрабатываемого операнда 32-битной стандартной x86-инструкции составляет 16 байт (а Core 2 производит выборку контейнерами именно по 16 байт), однако на практике многие операции могут не вписываться в определенные 16-байтовые границы, такие как сложные комбинации команд SSE второй версии или выше. Когда компиляторы при обработке исходного кода не могут гарантировать попадание в 16-байтные границы, процессоры Core 2 получают серьезные просадки производительности, даже тогда, когда выполняется операция незаданного размера над данными известного объема. Этому должен препятствовать внутренний 64-байтный микробуфер для хранения обработанных 16-байтных контейнеров, но и на него накладываются ограничения по сложности инструкций. Ранее разработчикам приходилось писать дополнительный код, специально нацеленный на программное исправление данного явления. Теперь же в этом нет нужды – в Nehalem Intel удалось не только полностью избавиться от проблем при исполнении операций неизвестного размера над данными известного, но и кардинально снизить падение скорости, когда не определены ни размеры инструкции, ни данных. Даже если при компиляции всегда будут использованы операции необъявленного размера (кстати, это стандартная настройка во многих средах разработки), или же декодер каждый раз будет натыкаться на блоки свыше 16 байт, это не приведет к серьезным потерям производительности, а программистам сэкономит время. Нельзя не отметить и возросшую скорость синхронизации потоков. [N8-Новое поколение Hyper Threading] Много времени утекло с того момента, когда корпорация Intel впервые представила процессоры Pentium 4 с первой версией технологии Hyper Threading. Когда еще не было прямых предпосылок к увеличению количества ядер в домашних ПК, Intel уже предопределяла будущее индустрии микропроцессоров, подготавливая программистов к “параллельному” будущему. HT – маркетинговое название технологии SMT (Simultaneous Multi-Threading, одновременная многопоточность), предполагающей благодаря специальным механизмам исполнение за один такт инструкций из двух потоков. Операционная система определяет ПК с Hyper Threading как многопроцессорную конфигурацию, разделяя команды в несколько линий (в случае с P4 – одно ядро могло обрабатывать две линии). При проектировании Core от HT решено было отказаться, ведь даже сейчас для большинства домашних потребностей достаточно и двух ядер. Сегодня Hyper Threading возвращается в Nehalem (опять же – серверная ориентация, только профессиональные приложения получают существенный прирост даже от увеличения количества физических ядер), однако теперь производительность новой инкарнации HT будет на порядок выше первой версии. На это есть несколько причин:
Также как и в случае с Atom, внедрение в Nehalem HT не потребовало серьезных транзисторных затрат. Фактически, на каждое ядро требуется продублировать только возвратный стек-буфер, регистры состояния и часть TLB, отвечающую за организацию больших страниц. Остальные части ядра используются совместно на очередной основе (какому из жонглируемых ядром потоков блок нужнее в данный момент, тому он и отдается), либо были статически разделены на этапе проектирования CPU: Вспоминая о золотом правиле процессоростроения Intel, нельзя не отметить насколько энергетически эффективной является интеграция в Nehalem Hyper Threading. Ведь в хорошо распараллеленных приложениях прирост от технологии очевиден, а с учетом особенности новой реализации HT, он будет проявляться в большем числе приложений, чем в случае с Pentium 4. [N9-Иерархия кэш-памяти] Вообще говоря, красноречиво говорит за себя данный слайд: Как и в случае с AMD Phenom, у Nehalem в наличии трехуровневый кэш. У каждого ядра выделена своя собственная память первого уровня в 64 Кб (по равным 32 Кб на данные и на инструкции) и 256 Кб L2, а целых 8 Мб кэша третьего уровня разделяно между всеми ядрами. Кэш ядер L1 располагает таким же объемом, как и Penryn, однако скорость его работы снижена (3 такта против 4). Intel пришлось замедлить кэш L1, так как он серьезно ограничивал общую тактовую частоту CPU. Конечно, такое решение было принято после многочисленных исследований производительности. С учетом большой площади кристалла процессора и его общей сложности оказалось, что намного лучше принести в жертву низкие задержки кэша, нежели ограничивать верхнюю планку частоту. По данным Intel увеличение задержек L1 на треть приводит к потери всего 2-3% производительности. Придется проверить на слово, инструментов для проверки таких заявлений нет. L2 сравнивать напрямую с пред |
Источник: www.anandtech.com/