Понятно, почему именно Intel заинтересовалась растянутым
кремнием. Она делает ставку на рост частот, значит, каждый такт
процессора должен становиться всё короче и короче по времени. Он
может становиться настолько коротким, что электрический сигнал
просто не сможет успеть дойти от одного блока процессора к другому,
что будет порождать постоянные задержки в несколько тактов.
Например, Pentium4 складывает содержимое двух регистров с такой же
скоростью, как и копирует их. Действительно, что есть копирование
одного регистра в другой? Это зануление одного и сложение.
Однако, применение новой технологии растянутого кремния имеет
свои минусы. Есть смутные слухи о том, что новые уменьшенные
транзисторы имеют большой «ток утечки». Электроны получили большую
подвижность благодаря растянутому кремнию, и движутся не только куда
надо, но еще и куда попало, проникая через затворы транзисторов в
обратном направлении, чего быть не должно. И вот это обстоятельство
якобы мешает легкому наращиванию частоты.
Prescott якобы должен был стать некоторой промежуточной моделью
между Pentium 4 Northwood и процессорным ядром Tejas, которое
планировалось на вторую половину этого года, и должно было быть
весьма навороченным: 64 бита и много чего еще. Так что жизненный
цикл Prescott должен был быть ещё более коротким, чем период
Willamette. Однако известно ведь, что нет ничего более постоянного,
чем временное. Так что вполне вероятно, что новое ядро надолго
задержится в производстве.
Итак, настала пора посмотреть, какие изменения претерпела
архитектура Netburst в новом процессоре.
Глянем сначала в целом на сравнительную таблицу характеристик
Northwood и Prescott.
Первое, что бросается в глаза - увеличившийся размер кэшей
первого и второго уровня и поддержка нового набора инструкций SSE3.
Размер кэшей, особенно, кэша второго уровня, очень любят указывать в
прайс-листах для удовлетворения слегка продвинутых покупателей,
чтобы они могли отличать различные модификации процессоров. Люди
покупают не только мегагерцы, но и килобайты кэша, особенно после
того, как они получили возможность сравнить производительность
Pentium 4 и P4 Celeron.
Однако производительность процессора, как мы знаем, зависит от
множества показателей. Вот, например, объём кэшей увеличился, но
латентность-то возросла, что может быть более важным. Давайте этот
момент обсудим более плотно.
Prescott и иерархия кэшей
Так как размер кэшей увеличился в два раза, можно примерно
представить, почему латентность кэша второго уровня серьёзно
возросла.
Размер-то блоков памяти увеличился вдвое, однако расстояние до
них тоже несколько возросло, и возросло время поиска данных в внутри
блока из-за увеличившегося размера Какой из факторов должен
перевесить – объем или время поиска? В общем случае сказать сложно,
но есть несколько крайних случаев.
Если приложение работает с большим объёмом данных, много большим,
чем размер кэш-памяти, и очень часто происходит случайный доступ к
памяти, то увеличение кэша L2 в два раза не сильно увеличит процент
попаданий в этот кэш, а возросшая латентность не сильно повлияет на
производительность. В этом случае особых изменений в
производительности не будет, так как она и так сильно ограничена
эффективностью чтения из памяти. Но если объём используемых
приложением данных сравним с объёмом кэша L2, то увеличение его
объема вдвое сильно снизит процент «промахов» и сильно повысит
производительность, несмотря на возросшую латентность, так как она
всё равно значительно меньше латентности «обычной» оперативной
памяти.
Однако, если объём используемых данных меньше размера КЭШа,
данные хорошо локализуются и располагаются в памяти последовательно,
то увеличение латентности приведёт к заметному падению
производительности.
Таким образом, можно ожидать все три варианта изменения
производительности из-за изменений характеристик кэша L2. Все
зависит от приложений.
В некоторой степени похожа на ситуацию с КЭШем L2 ситуация с
изменением параметров L1 КЭШа. Но если промахи в кэш второго уровня
всё-таки достаточно редки, процент попаданий даже для самых «плохих»
программ приближается к 99%, то объем «наличной» памяти первого
уровня очень невелик, и промахи случаются регулярно, намного чаще,
чем в L2: попаданий может быть всего около 75%. Так что увеличение
объема L1 должно благотворно сказаться на производительности, так
как его латентность всё равно меньше, чем латентность кэша L2. А 16
Кбайт существенно ближе к объёму современных структур данных, чем
8KB. Так что увеличение L1, не смотря на слегка увеличившуюся
латентность, занесём скорее в плюс. Хотя и тут может быть некоторый
отрицательный эффект в отдельных случаях.
Но помимо увеличения размера, возросла также ассоциативность L1
КЭШа с 4 до 8. Это усложняет КЭШ, но позволяет в некоторых случаях
более оптимально его заполнить. Дело в том, что КЭШ не может
содержать произвольный регион памяти, и дело здесь не в размере, а в
его устройстве. Возвращаясь к нашей аналогии, представьте себе, что
ранее ларёк мог содержать не более 4 продуктов одного типа, но
разных производителей, а теперь целых 8.
Важно помнить, что латентность кэшей увеличилась не в секундах, а
в тактах, и это сделано с целью дальнейшего наращивания частот. При
росте частот абсолютное время доступа к кэш-памяти может уменьшиться
до текущего значения, а потом стать ещё меньше. Таким образом, с
целью наращивания частоты увеличивается не только стадийность
конвейера, но и время доступа (в тактах) к кэшам.
Прочтите
следующий абзац, и вам станет понятно, зачем были увеличены объемы
кэш-памяти обоих уровней.
Prescott и удлинившийся конвейер
С целью дальнейшего наращивания частоты конвейер также был
«несколько» удлинён – более чем в полтора раза, с 20 до 31
ступени.
Думаю, понятно, чем плохо удлинение конвейера - при неудачно
предсказанном ветвлении конвейер приходиться сбрасывать, так как он
выполнял не ту работу, и чем больше стадий, тем больше штрафных
тактов мы имеем в итоге. Но в Prescott обещают улучшенный блок
предсказания ветвлений. Можно попробовать прикинуть, сможет ли он
компенсировать «штрафы» за неправильно предсказанные ветвления.
Процент предсказания естественно колеблется от программы к
программе, но 90% и даже более являются типичным значением. Таким
образом, если «штраф» увеличился меньше, чем на треть, то процент
неправильно предсказанных ветвлений должен уменьшиться с 10 до 7,5
процентов. То есть, процент предсказания ветвлений должен возрасти с
90% до 92.5%. Казалось бы, всего ничего, он и так во многих случаях
достигает 95%.
Однако, не очень правильно считать средний процент предсказания
ветвлений по программе, и прикидывать, насколько его необходимо
увеличить. Дело в том, что ветвления бывают случайные и регулярные.
Регулярные ветвления довольно хорошо предсказываются на основе
предыдущей статистики их выполнения. А случайные ветвления в
принципе невозможно предсказать на основании сбора предыдущей
статистики их выполнения. Вы ведь не можете предсказать, как выпадет
монетка на основании просмотра её предыдущих бросков. Таким образом,
в сложных программах, насыщенных случайными ветвлениями, потери от
ветвлений возрастут, а в программах с регулярными ветвлениями они
могут даже уменьшиться за счёт улучшенного предсказания.
Но совсем не стоит сильно расстраиваться в связи с потерями
производительности при случайных условных переходах из-за
многостадийного конвейера. Дело в том, что неправильно предсказанные
переходы порождают лишние обращения к памяти, а задержки памяти
могут составлять сотни тактов, что гораздо больше потерь из-за
сброса конвейера. Процессор автоматически осуществляет загрузку в
кэш данных, как только в программе будет вычислен необходимый адрес,
ещё до того, как данные будут реально использоваться.
Предварительная загрузка данных в раздувшийся кэш L1, кстати, должна
также скрасить ухудшенную латентность L2 кэша. Неплохой новостью в
этой связи будет то, что инженеры озаботились улучшением реализации
алгоритмов предвыборки данных в новом процессоре.
Не стоит забывать, что процессор кэширует не только данные, но и
код, и в случае правильно предсказанного перехода необходимые
инструкции уже декодированы и расположены в трэйс-кэше. В противном
случае может возникнуть большая задержка. Таким образом, удлинение
конвейера может лишь слегка увеличить потери от случайных ветвлений,
так как есть другие, не менее важные, ограничивающие
производительность факторы.
Prescott и технология Hyper-Threading
По заявлениям Intel, технология HT претерпела заметные улучшения
в новых процессорах. Есть несколько предпосылок для этого. Первое,
но не самое важное - увеличение количества эксклюзивных ресурсов
процессора для каждой нити. Например, возросло количество
разнообразных буферов записи в память, в том числе, буферов
комбинированной записи в некэшируемые области памяти, например, в
видеопамять. Суть их состоит в том, что данные перед отправкой по,
например, AGP, сначала накапливаются в специальных буферах, а потом
передаются одной транзакцией, вместо нескольких, работающих с
небольшими кусками данных. Это обещает небольшое увеличение
производительности многонитевого приложения при работе, например, с
видео.
Другое очевидное, вероятно, более важное улучшение состоит в
увеличении размеров кэш-памяти всех уровней, которые призваны
обеспечивать нити данными. Две нити более прожорливы, чем одна, и
требуют больше данных. Так что, в некоторых случаях прирост от
использования HT может быть больше на Prescott, чем на аналогичном
Northwood, именно по этой причине.
Улучшилась поддержка HT и с точки зрения набора процессорных
инструкций. Появились две новые инструкции, monitor и mwait. Они
делают оптимизацию программ и компонентов операционной системы под
технологию HT более легкой. Собственно, применение этих инструкций
позволяет эффективно организовать «засыпание» лишних потоков, чтобы
они сами не задействовали один из логических процессоров для
постоянной проверки флага пробуждения. Процессор эффективным образом
делает это за них, отслеживая запись в указанный район памяти и
пробуждая по необходимости поток.
Но, конечно, это требует перекомпиляции программ и обновления
операционной системы, так что это небольшое улучшение проявит себя
не сразу.
Другая причина называть новую версию технологию HT «улучшенной»
состоит в том, что прирост от HT в Prescott может быть больше, чем в
Northwood, за счёт уменьшения быстродействия однопоточного
варианта, например, из-за увеличившейся латентности кэша. А HT
будет нивелировать это, так как во время ожидания данных
инструкциями одной нити инструкции другой нити, данные для которых
уже есть в регистрах или в L1, могут успешно выполняться.
Таким образом, для оптимизированных под Hyper-Threading
приложений можно ожидать серьезный рост производительности.
Prescott и trace cache
Многие надеялись на подтверждение слухов об увеличении размера кэша инструкций (trace cache) с 12 Kmops до 16 Kmops в Prescott.
Этот кэш содержит уже декодированные в микрооперации обычные
инструкции x86, а поскольку одна микрооперация занимает несколько
байт, физический размер кэша данных на 12 тысяч инструкций
получается куда большим, чем 12 Кбайт. Истинный размер trace cache
держится в большом секрете.
Инструкции в trace cache содержатся не в порядке их расположения
в памяти, а в порядке их расположения в программе с учетом условных
переходов, которые специально предсказываются. Такая организация
позволяет непрерывно снабжать процессор потоком инструкций. То есть,
это кэш получается умнее обычного кэша инструкций первого уровня.
Представьте себе, например, что у вас в кошельке монеты уже
расположены в том порядке, в котором вы будете платить за
покупку.
Trace cache умеет доставлять в процессорное ядро 3 инструкции за
такт, там они помещаются в пул инструкций и выполняются по мере
готовности функциональных устройств. Ходили слухи, что кэш
инструкций Prescott будет вмещать 16 тыс. операций и уметь
доставлять 4 инструкции за такт, что могло поднять
производительность. Однако, так как количество функциональных
устройств всякого умножения-сложения и т.п. не увеличилось, то и
необходимости в увеличении скорости выдачи микроопераций особой нет
- их просто некому будет обрабатывать.