Почему, например, двухъядерный Core i5 с частотой 2,66 ГГц будет быстрее, чем Core 2 Duo с частотой 2,66 ГГц, который также является двухъядерным?
Это из-за более новых инструкций, которые могут обрабатывать информацию за меньшее количество тактов? Какие другие архитектурные изменения вовлечены?
Этот вопрос часто возникает, и ответы обычно совпадают. Этот пост предназначен для того, чтобы дать окончательный, канонический ответ на этот вопрос. Не стесняйтесь редактировать ответы, чтобы добавить дополнительные детали.
Ответы:
Обычно это не из-за новых инструкций. Это просто потому, что процессору требуется меньше циклов команд для выполнения одних и тех же команд. Это может быть по большому количеству причин:
Большие кеши означают меньше времени, потраченного на ожидание памяти.
Больше исполнительных блоков означает меньше времени ожидания, чтобы начать работать с инструкцией.
Лучшее предсказание ветвления означает меньше времени, потраченного на умозрительное выполнение инструкций, которые фактически никогда не должны выполняться.
Улучшения исполнительного блока означают меньше времени ожидания выполнения инструкций.
Более короткие трубопроводы означают, что трубопроводы заполняются быстрее.
И так далее.
источник
Проектирование процессора для обеспечения высокой производительности - это гораздо больше, чем просто увеличение тактовой частоты. Существует множество других способов повысить производительность, реализованных по закону Мура и способствующих разработке современных процессоров.
Тарифы не могут увеличиваться бесконечно.
На первый взгляд может показаться, что процессор просто выполняет поток инструкций один за другим, причем повышение производительности достигается за счет более высоких тактовых частот. Однако одного только увеличения тактовой частоты недостаточно. Потребляемая мощность и тепловая мощность увеличиваются с повышением тактовой частоты.
При очень высоких тактовых частотах необходимо значительно увеличить напряжение ядра процессора . Поскольку TDP увеличивается с квадратом V- ядра , мы в конечном итоге достигаем точки, когда чрезмерное энергопотребление, тепловая мощность и требования к охлаждению препятствуют дальнейшему увеличению тактовой частоты. Этот предел был достигнут в 2004 году, во времена Pentium 4 Prescott . Хотя недавние улучшения в энергоэффективности помогли, существенное увеличение тактовой частоты уже невозможно. Смотрите: Почему производители процессоров перестали увеличивать тактовые частоты своих процессоров?
График стандартных тактовых частот в современных ПК для энтузиастов за прошедшие годы. Источник изображения
Кажущиеся последовательными потоки команд часто могут быть распараллелены.
Конвейер разбивает инструкции на более мелкие части, которые могут выполняться параллельно.
Каждая инструкция может быть разбита на последовательность шагов, каждый из которых выполняется отдельной частью процессора. Конвейерная обработка инструкций позволяет нескольким инструкциям проходить эти шаги один за другим, не дожидаясь полного завершения каждой инструкции. Конвейерная передача обеспечивает более высокую тактовую частоту: при выполнении одного шага каждой инструкции в каждом тактовом цикле потребуется меньше времени для каждого цикла, чем если бы все инструкции выполнялись по одной за раз.
Классический трубопровод RISC содержит пять этапов: FETCH инструкции, инструкция декодирование, выполнение инструкций, доступ к памяти и обратной запись. Современные процессоры разбивают выполнение на гораздо больше этапов, создавая более глубокий конвейер с большим количеством этапов (и увеличивая достижимые тактовые частоты, поскольку каждый этап меньше и занимает меньше времени), но эта модель должна дать базовое понимание того, как работает конвейерная обработка.
Источник изображения
Однако конвейерная обработка может создавать опасности, которые необходимо устранить для обеспечения правильного выполнения программы.
Поскольку разные части каждой инструкции выполняются одновременно, возможно возникновение конфликтов, которые мешают правильному выполнению. Это так называемые опасности . Существует три типа опасностей: данные, структура и контроль.
Опасность данных возникает, когда инструкции читают и изменяют одни и те же данные одновременно или в неправильном порядке, что может привести к неверным результатам. Структурные риски возникают, когда нескольким инструкциям необходимо одновременно использовать определенную часть процессора. Опасности управления возникают, когда встречается инструкция условного перехода.
Эти опасности могут быть решены различными способами. Самое простое решение - просто остановить конвейер, временно приостановив выполнение одной или инструкций в конвейере для обеспечения правильных результатов. Этого по возможности избегают, поскольку это снижает производительность. В случае опасности данных используются такие методы, как переадресация операнда , чтобы уменьшить задержки. Опасности управления обрабатываются с помощью прогнозирования ветвлений , который требует особого подхода и рассматривается в следующем разделе.
Прогноз ветвления используется для устранения опасностей, которые могут нарушить весь трубопровод.
Контрольные опасности, возникающие при возникновении условного перехода , особенно серьезны. Ветви предоставляют возможность продолжения выполнения в другом месте программы, а не просто следующей команды в потоке команд, в зависимости от того, является ли конкретное условие истинным или ложным.
Поскольку следующая команда для выполнения не может быть определена до тех пор, пока не будет оценено условие ветвления, невозможно вставить какие-либо инструкции в конвейер после ветвления в отсутствии. Следовательно, трубопровод опорожняется ( промывается ), что может привести к потере почти столько же тактовых циклов, сколько этапов в трубопроводе. В программах часто возникают ветвления, поэтому угрозы управления могут серьезно повлиять на производительность процессора.
Предсказание ветвлений решает эту проблему, угадывая, будет ли взята ветвь. Самый простой способ сделать это - просто предположить, что ветки всегда взяты или никогда не взяты. Однако современные процессоры используют гораздо более сложные методы для более высокой точности прогнозирования. По сути, процессор отслеживает предыдущие ветви и использует эту информацию любым из нескольких способов, чтобы предсказать следующую команду для выполнения. Затем конвейер может быть снабжен инструкциями из правильного местоположения на основе прогноза.
Конечно, если прогноз неверен, любые инструкции, которые были введены через конвейер после ветвления, должны быть отброшены, тем самым сбрасывая конвейер. В результате точность предсказателя ветвления становится все более критичной, так как конвейеры становятся все длиннее и длиннее. Конкретные методы прогнозирования ветвления выходят за рамки этого ответа.
Кэши используются для ускорения доступа к памяти.
Современные процессоры могут выполнять инструкции и обрабатывать данные гораздо быстрее, чем они могут быть доступны в основной памяти. Когда процессор должен получить доступ к ОЗУ, выполнение может приостановиться на длительные периоды времени, пока данные не станут доступны. Чтобы смягчить этот эффект, в процессор включены небольшие области высокоскоростной памяти, называемые кэшами .
Из-за ограниченного пространства, доступного на кристалле процессора, кэши имеют очень ограниченный размер. Чтобы максимально использовать эту ограниченную емкость, кэши хранят только самые последние или часто используемые данные ( временная локальность ). Поскольку доступ к памяти, как правило, кластеризован в определенных областях ( пространственная локальность ), блоки данных, близкие к тому, к которому недавно осуществлялся доступ, также сохраняются в кэше. Смотрите: Местонахождение ссылки
Кэши также организованы на нескольких уровнях различного размера для оптимизации производительности, поскольку большие кэши, как правило, медленнее, чем меньшие. Например, процессор может иметь кэш 1-го уровня (L1) размером всего 32 КБ, а кэш-память 3-го уровня (L3) может иметь размер несколько мегабайт. Размер кеша, а также ассоциативность кеша, которые влияют на то, как процессор управляет заменой данных в полном кеше, существенно влияют на прирост производительности, который получается через кеш.
Внеочередное выполнение сокращает задержки из-за опасностей, позволяя первым выполнять независимые инструкции.
Не каждая инструкция в потоке команд зависит друг от друга. Например, хотя
a + b = c
должны быть выполнены доc + d = e
,a + b = c
иd + e = f
являются независимыми и могут быть выполнены в то же время.Внеочередное выполнение использует этот факт, чтобы позволить другим независимым инструкциям выполняться, пока одна команда остановлена. Вместо того, чтобы требовать, чтобы инструкции выполнялись одна за другой в режиме блокировки,добавляется оборудование планирования, позволяющее выполнять независимые инструкции в любом порядке. Инструкции отправляются в очередь инструкций и выдаются соответствующей части процессора, когда требуемые данные становятся доступными. Таким образом, инструкции, которые застряли в ожидании данных из более ранней инструкции, не связывают более поздние инструкции, которые являются независимыми.
Источник изображения
Суперскалярные архитектуры позволяют выполнять несколько команд в потоке команд одновременно.
Методы, обсужденные выше, только увеличивают производительность конвейера команд. Одни только эти методы не позволяют выполнять более одной инструкции за такт. Тем не менее, часто можно выполнять отдельные инструкции в потоке команд параллельно, например, когда они не зависят друг от друга (как обсуждалось в разделе выполнения вне порядка) выше.
Суперскалярные архитектуры используют преимущества параллелизма на уровне команд, позволяя отправлять инструкции нескольким функциональным блокам одновременно. Процессор может иметь несколько функциональных блоков определенного типа (таких как целочисленные ALU) и / или различных типов функциональных блоков (таких как целочисленные и целочисленные блоки), на которые могут одновременно отправляться инструкции.
В суперскалярном процессоре инструкции планируются как в неупорядоченном дизайне, но теперь имеется несколько портов выдачи , позволяющих одновременно выполнять и выполнять разные инструкции. Расширенная схема декодирования команд позволяет процессору одновременно считывать несколько команд в каждом тактовом цикле и определять отношения между ними. Современный высокопроизводительный процессор может планировать до восьми команд за такт, в зависимости от того, что делает каждая команда. Так процессоры могут выполнять несколько инструкций за такт. Смотрите: Движок исполнения Haswell на AnandTech
Источник изображения
Добавлены более сложные инструкции, которые выполняют сложные операции за меньшее время.
По мере увеличения бюджетов транзисторов становится возможным реализовать более сложные инструкции, которые позволяют выполнять сложные операции за долю времени, которое они в противном случае занимали бы. Примеры включают в себя наборы векторных инструкций, такие как SSE и AVX, которые выполняют вычисления для нескольких фрагментов данных одновременно, и набор инструкций AES, который ускоряет шифрование и дешифрование данных.
Для выполнения этих сложных операций современные процессоры используют микрооперации (мопы) . Сложные инструкции декодируются в последовательности мопов, которые хранятся в выделенном буфере и планируются для выполнения индивидуально (в той степени, которая допускается зависимостями данных). Это дает процессору больше возможностей для использования ILP. Для дальнейшего повышения производительности можно использовать специальный кэш мопов для хранения недавно декодированных мопов, чтобы можно было быстро найти мопы для недавно выполненных команд.
Однако добавление этих инструкций не повышает производительность автоматически. Новые инструкции могут повысить производительность, только если приложение написано для их использования. Принятию этих инструкций препятствует тот факт, что приложения, использующие их, не будут работать на старых процессорах, которые их не поддерживают.
Так как же эти методы улучшают производительность процессора с течением времени?
С течением времени конвейеры стали длиннее, что сокращает время, необходимое для завершения каждого этапа, и, следовательно, обеспечивает более высокую тактовую частоту. Однако, среди прочего, более длинные конвейеры увеличивают штраф за неправильный прогноз ветвления, поэтому конвейер не может быть слишком длинным. Пытаясь достичь очень высоких тактовых частот, процессор Pentium 4 использовал очень длинные конвейеры, до 31 ступени в Prescott . Чтобы уменьшить дефицит производительности, процессор будет пытаться выполнить инструкции, даже если они могут потерпеть неудачу, и продолжит попытки, пока они не преуспеют . Это привело к очень высокому энергопотреблению и уменьшило производительность, получаемую от гиперпоточности . Более новые процессоры больше не используют конвейеры так долго, тем более что масштабирование тактовой частоты достигло предела;Haswell использует конвейер длиной от 14 до 19 этапов, а архитектуры с низким энергопотреблением используют более короткие конвейеры (Intel Atom Silvermont имеет от 12 до 14 этапов).
Точность прогнозирования ветвлений повысилась благодаря более продвинутым архитектурам, уменьшающим частоту сбрасываний конвейера, вызванным неправильным прогнозированием, и позволяющим одновременно выполнять больше команд. Учитывая длину конвейеров в современных процессорах, это имеет решающее значение для поддержания высокой производительности.
С увеличением бюджетов транзисторов в процессор могут быть встроены более крупные и эффективные кэши, что сокращает задержки из-за доступа к памяти. Для доступа к памяти может потребоваться более 200 циклов в современных системах, поэтому важно максимально сократить потребность в доступе к основной памяти.
Более новые процессоры могут лучше использовать преимущества ILP благодаря более продвинутой логике суперскалярного выполнения и «более широким» конструкциям, которые позволяют одновременно декодировать и выполнять больше команд. Архитектура Haswell может декодировать четыре инструкции и отправлять 8 микроопераций за такт. Увеличение бюджетов транзисторов позволяет включать в ядро процессора больше функциональных блоков, таких как целочисленные ALU. Ключевые структуры данных, используемые при неупорядоченном и суперскалярном выполнении, такие как станция резервирования, буфер переупорядочения и файл регистров, расширены в новых разработках, что позволяет процессору искать более широкое окно инструкций для использования их ILP. Это основная движущая сила повышения производительности современных процессоров.
Более сложные инструкции включены в более новые процессоры, и все большее число приложений используют эти инструкции для повышения производительности. Достижения в технологии компиляции, включая улучшения в выборе команд и автоматической векторизации , позволяют более эффективно использовать эти инструкции.
В дополнение к вышесказанному, более широкая интеграция компонентов, ранее внешних по отношению к ЦП, таких как северный мост, контроллер памяти и линии PCIe, уменьшает ввод-вывод и задержку памяти. Это увеличивает пропускную способность за счет уменьшения задержек, вызванных задержками в доступе к данным с других устройств.
источник
Абсолютным окончательным справочником являются Руководства для разработчиков программного обеспечения для архитектуры Intel 64 и IA-32 . Они детализируют изменения между архитектурами и являются отличным ресурсом для понимания архитектуры x86.
Я бы порекомендовал вам скачать объединенные тома с 1 по 3C (первая ссылка для скачивания на этой странице). Том 1 Глава 2.2 содержит информацию, которую вы хотите.
Некоторые общие отличия, перечисленные в этой главе, от ядра до микроархитектуры Nehalem / Sandy Bridge:
Полный список можно найти по ссылке, приведенной выше (т. 1, гл. 2.2).
источник
Все сказанное ранее верно, но в некоторой степени. Мой ответ короткий: процессоры нового поколения «быстрее», в первую очередь потому, что у них больше и лучше организованы кэши . Это основной фактор производительности компьютера. Более подробные сведения см. В статье « Журнал Linux: что влияет на производительность в HPC »
Короче говоря, для большинства распространенных приложений (как в коллекции SPEC) ограничивающим фактором является память. Когда выполняются реальные устойчивые вычисления, все кеши загружаются данными, но каждый промах кеша приводит к зависанию и ожиданию канала выполнения ЦП. Проблема заключается в том, что независимо от того, насколько сложен конвейер ЦП или лучше инструкции, параллелизм на уровне команд все еще довольно ограничен (за исключением некоторых специальных высоко оптимизированных предварительно выбранных случаев). Как только обнаруживается критическая зависимость, весь параллелизм заканчивается пятью десятью тактовыми частотами процессора, в то время как требуются сотни тактовых частот процессоров, чтобы изгнать кахелину и загрузить новую из основной памяти. Таким образом, процессор ждет, ничего не делая. Вся эта концепция верна и для многоядерных систем.
Итак, если вам нужен «более быстрый» ПК, купите его с процессором, который имеет самый большой кеш, который вы можете себе позволить.
источник
Потому что они улучшают то, как много инструкций для каждого цикла (такта) может делать ЦП, включая более высокие исполнительные блоки (вычислительные блоки), по этой причине улучшая IPC, кроме того, они уменьшают кэш, оперативную память, декодируют, извлекают задержки, улучшают внеочередные операции и прогнозирование ветвлений, после чего добавьте больше кеша при меньшем времени ожидания. Более высокая пропускная способность кеша. Добавляйте новые инструкции время от времени. Сократить количество циклов в расчете на инструкцию (ИПЦ)
Тактовые частоты являются лишь частью производительности процессора, важным компонентом, но, к несчастью, узлы метода ударялись о стену последние десять лет или около того, ничто не может выйти за пределы 5,0–5,2 ГГц, несмотря на качественное водяное охлаждение. , не прибегая к сухому льду или жидкому азоту.
источник