Меню

Что такое архитектура процессора: Что такое архитектура процессора?

Содержание

Что такое архитектура процессора?

    Желаете обеспечить свой дом дом бесперебойной электронергией или ищите источник бесперебойного питания? Вот такой генератор Кентавр подойдет для вашей цели максимально удачно. Высокая надежность работы, низкий расход топлива и малая шумность работы – это то, что отличает генераторы Кентавр, от других моделей. Спешите приобрести генератор уже сейчас!

С появлением электронно-вычислительных машин произошла лишь одна, по-настоящему крупная революция и прогресс в технологиях. Так, на смену старым, вакуумным лампам пришли новые, полупроводниковые технологии, которые навсегда отпечатались в современной электронике. Сегодня, большинство мобильных устройств работают на всё тех же, но совершенно доработанных полупроводниковых изобретениях – процессорах. Сейчас мы расскажем, что такое архитектура процессора и для чего она нужна.

Архитектурой называют совокупность главных принципов конструирования процессора, в которой общая схема располагается на кремниевом кристалле, а также схему взаимодействия ПО вместе с чипом.

Простыми словами, архитектурой называют схему, по которой собран процессор.


За всё время существования микропроцессорной техники, было множество различных видов архитектур. Наиболее популярными являются CISC, MISC, VLIW и RISC. Отличия между ними заключаются лишь в том, как они взаимодействуют с данными, которые поступают к процессору, и которые из него исходят.

Схема работы архитектуры процессора несколько сложнее. Так, данные в схеме обрабатываются последовательным путем. К примеру, в начале, процессор получает инструкцию, затем производит чтение данных, после производит необходимые вычисления, а в конце выдает полученный результат. Но, это всё очень абстрактно, на самом деле, работа микропроцессора куда сложнее.

Количество таких процессов и операций может достигать десятки тысяч. Естественно, в процессе всего этого могут возникать ошибки, но чем меньше их будет, тем качественнее и стабильнее будет работать система. Существенно меньше ошибок происходит в процессорах с архитектурой RISC.

В ней предусмотрены намного более простые команды, которые улучшают производительность в целом.


Также не следует путать понятия архитектуры и микроархитектуры процессора, это несколько разные определяющие. Так, архитектурой называют принцип устройства микропроцессора, микроархитектурой лишь 1 из способов её реализации, в котором есть собственные особенности.

Одной из самых известных серий архитектур, считается «Cortex». В первых смартфонах присутствовала архитектура Cortex А7, которая сегодня считается устаревшей. Наиболее производительными сегодня считаются Cortex А72 и А73. Компания Apple в своих устройствах использует модифицированную архитектуру ARMv8.


Архитектура процессора — Xamarin | Microsoft Docs

  • Статья
  • Чтение занимает 3 мин
  • Участники: 7

Были ли сведения на этой странице полезными?

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт.

Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

Xamarin. Android поддерживает несколько архитектур ЦП, включая 32-разрядные и 64-разрядные устройства. В этой статье объясняется, как выбрать для приложения одну или несколько архитектур ЦП, поддерживаемых Android.

Обзор архитектуры ЦП

При подготовке приложения к выпуску необходимо указать архитектуру ЦП платформы, которую поддерживает ваше приложение. Один APK-файл может содержать код для нескольких различных архитектур. Каждая коллекция кода, зависящего от архитектуры, связана с двоичным интерфейсом приложения

(ABI). Каждый интерфейс ABI определяет, как должен взаимодействовать этот машинный код с Android во время выполнения. Дополнительные сведения о том, как это работает, см. в разделе устройства с несколькими ядрами Xamarin. Android.

Указание поддерживаемых архитектур

Как правило, при настройке приложения для выпускавы явно выбрали архитектуру (или архитектуры). Если приложение настроено для отладки, для параметра использовать общую среду выполнения и используются параметры быстрого развертывания , что отключает явный выбор архитектуры.

в Visual Studio щелкните правой кнопкой мыши проект в обозреватель решений и выберите пункт свойства. На странице Параметры Android проверьте раздел Свойства упаковки и убедитесь, что параметр использовать общую среду выполнения

отключен (отключение позволяет явно выбрать, для какой ABI требуется поддержка). Нажмите кнопку Дополнительно и в разделе Поддерживаемые архитектурыпроверьте архитектуры, которые требуется поддерживать.

Как правило, при настройке приложения для выпускавы явно выбрали архитектуру (или архитектуры). Если приложение настроено для отладки, включаются параметры использовать совместное использование среды выполнения Mono и быстрое развертывание сборок , что предотвращает выбор явной архитектуры.

в Visual Studio для Mac выберите проект на панели решения , щелкните значок шестеренки рядом с проектом и выберите параметры. в диалоговом окне параметры Project щелкните сборка Android

. Перейдите на вкладку Общие и убедитесь, что параметр использовать общую среду выполнения Mono отключен (отключить этот параметр позволяет явно выбрать, для какой ABI поддерживать). Перейдите на вкладку Дополнительно и в разделе Поддерживаемые ABIпроверьте ABI для архитектур, которые требуется поддерживать.

Xamarin.Android поддерживает следующие варианты архитектуры:

  • ARMEABI — процессоры на базе ARM, которые поддерживают по меньшей мере набор инструкций ARMv5TE. Обратите внимание, что armeabi не является потокобезопасным и не должно использоваться на устройствах с несколькими ЦП.

Примечание

Начиная с версии Xamarin.Android 9.2 больше не поддерживается.

  • ARMEABI-V7A

    — процессоры на базе ARM с аппаратными операциями с плавающей запятой и устройствами с несколькими ЦП (SMP). Обратите внимание, что armeabi-v7a машинный код не будет выполняться на устройствах ARMv5.

  • arm64-v8a — процессоры на основе архитектуры 64-bit ARMv8.

  • x86 — процессоры, поддерживающие набор инструкций x86 (или IA-32). этот набор инструкций эквивалентен использованию процессоров Pentium Pro, включая MMX, SSE, SSE2 и SSE3.

  • x86_64 Процессоры, поддерживающие 64-разрядный x86 (также называемый x64 и AMD64).

Для Xamarin. Android по умолчанию устанавливается значение armeabi-v7a для сборок armeabi-v7a . Этот параметр обеспечивает значительно лучшую производительность, чем

armeabi . Если вы нацелены на платформу 64-разрядной ARM (например, в табличное размещение 9), выберите arm64-v8a . Если вы развертываете приложение на устройстве x86, выберите x86 . Если целевое устройство x86 использует архитектуру с 64-разрядным ЦП, выберите x86_64 .

Нацеливание на несколько платформ

Чтобы ориентироваться на несколько архитектур ЦП, можно выбрать несколько интерфейсов ABI (за счет увеличения размера файла APK). Можно использовать параметр создать один пакет (. apk) для каждого выбранного параметра ABI (см. описание в разделе Установка свойств упаковки), чтобы создать отдельный APK для каждой поддерживаемой архитектуры.

Вам не нужно выбирать arm64-v8a или x86_64 для целевых 64-разрядных устройств. 64-разрядная поддержка не требуется для запуска приложения на 64-разрядном оборудовании. Например, в 64-разрядных устройствах ARM (например, в виде хранилища 9) можно запускать приложения, настроенные для . Основное преимущество поддержки 64-разрядной версии заключается в том, чтобы предоставить приложению возможность обращаться к большему объему памяти.

Дополнительные сведения

В некоторых ситуациях может потребоваться создать отдельный APK для каждой архитектуры (чтобы уменьшить размер APK, или потому, что приложение имеет общие библиотеки, характерные для конкретной архитектуры ЦП). Дополнительные сведения об этом подходе см. в разделе Build ABI-Specific пакетов apk.

Архитектура Zen: сколько поколений продержится главная технология AMD | Процессоры | Блог

Появившись четыре года назад, архитектура Zen совершила настоящий переворот на процессорном рынке. Сперва AMD захватили средний сегмент, предлагая лучшее соотношение цены и производительности.
Увеличив продажи, компания сделала рывок в высшую лигу — и вот уже Intel оказалась в роли догоняющего. Давайте разберемся, в чем причины успеха Ryzen и какой предел развития этой компоновки ЦП.  

Хорошая масштабируемость

Микроархитектура Zen стала революционным прорывом для AMD. Секрет успех заключается в чиплетной компоновке процессоров. Это значит, что ЦП состоит не из одного монокристалла, а из отдельных «кирпичиков» — чиплетов. Их соединяет шина обмена данными Infinity Fabric с пропускной способностью до 512 ГБ/с.

Каждый чиплет содержит лишь часть функционала процессора. CCD включает в себя ограниченное количество ядер с кэш-памятью, I/O чиплет — контроллеры памяти, шины PCI Express, шины Infinity Fabric и другие элементы ввода-вывода.

Например, Core Complex Die актуального поколения Zen 3 состоит из одного CCX-комплекса: 8 ядер с индивидуальным кэшем первого и второго уровней (L1 и L2), а также кэш-память третьего уровня (L3) объемом 32 Мб (общая для всех ядер). В процессорах Zen прежних поколений CCD состоял из двух четырехядерных CCX, соединенных между собой.

Из чиплетов, как из деталей конструктора, инженерам легко компоновать разные по производительности процессоры. Они без труда набирают необходимое количество ядер и отключают «ненужные».  Например, Ryzen 5 3600 в чиплете CCD имеет два CCX, у каждого из которых дезактивировали по ядру. На выходе получается шесть функциональных ядер.

Масштабируемость такой архитектуры довольно высока — можно продолжать добавлять аппаратные ресурсы. Следующие поколения Zen имеют неплохой задел на модернизацию.

На картинке выше — компоновка 16-ядерного процессора AMD Ryzen 9 5950X. У него два CCD по 8 ядер и I/O чиплет.

Менее мощный AMD Ryzen 7 5800X включает в себя лишь один CCD, поскольку у него всего восемь ядер.

К чиплетной компоновке инженеров подтолкнули недостатки процесса производства кристаллов. Последние содержат миллиарды транзисторов, размеры которых измеряются нанометрами. У актуального поколения Ryzen это 7 нм, а у Intel Alder Lake — 10 нм. Достаточно лишь одного неисправного транзистора, чтобы испортить кристалл. Причины бывают самые разные. Брак вызывают малейшая неточность или посторонняя частица, попавшая на поверхность кристалла при формировании слоев.

Чем больше и сложнее изготавливаемый продукт, тем выше вероятность получить брак. Поэтому инженеры AMD разделили один монокристалл на небольшие чиплеты. В случае брака в корзину выбрасывается лишь сам чиплет, а не процессор целиком.

Раздельная компоновка имеет и свои недостатки. Из-за длинных линий связи увеличиваются задержки при обмене информацией между ядрами, находящимися в разных CCD.

Развитие Zen — что дальше?

В грядущем Zen 4 логично ожидать внедрение поддержки PCIe 5.0 и переход на оперативную память DDR5 путем замены чиплета ввода-вывода. Это станет ответом на новые стандарты линейки Alder Lake от Intel. Следует ожидать плановой оптимизации ядер и небольшого увеличения производительности — как и всегда при обновлении архитектуры.

Сейчас наблюдается тенденция к увеличению количества ядер в процессорах. Современные программы осваивают все больше рабочих потоков, игры не отстают. Поэтому можно предположить, что архитектура начнет развиваться именно в сторону многоядерности. Вместе с этим вырастет и потребление энергии. Чтобы этого не происходило, придется уменьшать технологический процесс до 5, а то и 3-4 нм. Вариант вполне реалистичный. Кристаллы для процессоров AMD производит компания TSMC — у нее достаточно передового оборудования, чтобы обеспечить переход.

Возможно добавление некоторых новых инструкций — по типу AVX-512. Компания Intel физически реализовала их поддержку в Alder Lake, но по умолчанию эти векторные команды недоступны.

В условном Zen 5 или 6 произойдет увеличение количества ядер вместе с внедрением нового техпроцесса. Предполагаемая компоновка ЦП может выглядеть так:

Однако дальнейшее уменьшение технологического процесса будет даваться все сложнее. В теории, оно может происходить до того момента, когда канал транзистора будет состоять буквально из цепочки атомов. Но добиться этого на практике чрезвычайно тяжело.

Что ограничивает развитие архитектуры

Сколько поколений AMD будет развивать архитектуру Zen? Здесь все зависит от того, смогут ли модернизировать ее при возникновении отставания от Intel — и составить конкуренцию Raptor и Meteor Lake.

Если Zen будет достаточно, чтобы противостоять Intel, то нет никакого смысла выпускать новую архитектуру. Хотя она, скорее всего, уже неспешно разрабатывается.

Фактически необходимость перехода на новую компоновку полностью определяется графиком выше. И пример Intel в лице абсолютно нового 12-го поколения это показывает — как только снизились продажи, неспешное развитие пришлось резко ускорить.

Читать обзор флагманского процессора Intel Core i9-12900K с архитектурой Alder Lake

Если же говорить о технике, то развитие Zen может ограничиться пропускной способностью шины Infinity Fabric. Нагрузка на нее будет возрастать пропорционально увеличению количества ядер.

Архитектуры процессора intel за все время

Компания Intel прошла очень длинный путь развития, от небольшого производителя микросхем до мирового лидера по производству процессоров. За это время было разработано множество технологий производства процессоров, очень сильно оптимизирован технологический процесс и характеристики устройств.

Множество показателей работы процессоров зависит от расположения транзисторов на кристалле кремния. Технологию расположения транзисторов называют микроархитектурой или просто архитектурой. В этой статье мы рассмотрим какие архитектуры процессора Intel использовались на протяжении развития компании и чем они отличаются друг от друга. Начнем с самых древних микроархитектур и рассмотрим весь путь до новых процессоров и планов на будущее.

Архитектура процессора и поколения

Как я уже сказал, в этой статье мы не будем рассматривать разрядность процессоров. Под словом архитектура мы будем понимать микроархитектуру микросхемы, расположение транзисторов на печатной плате, их размер, расстояние, технологический процесс, все это охватывается этим понятием. Наборы инструкций RISC и CISC тоже трогать не будем.

Второе, на что нужно обратить внимание, это поколения процессора Intel. Наверное, вы уже много раз слышали — этот процессор пятого поколения, тот четвертого, а это седьмого. Многие думают что это обозначается i3, i5, i7. Но на самом деле нет i3, и так далее — это марки процессора. А поколение зависит от используемой архитектуры.

С каждым новым поколением улучшалась архитектура, процессоры становились быстрее, экономнее и меньше, они выделяли меньше тепла, но вместе с тем стоили дороже. В интернете мало статей, которые бы описывали все это полностью. А теперь рассмотрим с чего все начиналось.

Архитектуры процессора Intel

Сразу говорю, что вам не стоит ждать от статьи технических подробностей, мы рассмотрим только базовые отличия, которые будут интересны обычным пользователям.

Первые процессоры

Сначала кратко окунемся в историю чтобы понять с чего все началось. Не будем углубятся далеко и начнем с 32-битных процессоров. Первым был Intel 80386, он появился в 1986 году и мог работать на частоте до 40 МГц. Старые процессоры имели тоже отсчет поколений. Этот процессор относиться к третьему поколению, и тут использовался техпроцесс 1500 нм.

Следующим, четвертым поколением был 80486. Используемая в нем архитектура так и называлась 486. Процессор работал на частоте 50 МГц и мог выполнять 40 миллионов команд в секунду. Процессор имел 8 кб кэша первого уровня, а для изготовления использовался техпроцесс 1000 нм.

Следующей архитектурой была P5 или Pentium. Эти процессоры появились в 1993 году, здесь был увеличен кэш до 32 кб, частота до 60 МГц, а техпроцесс уменьшен до 800 нм. В шестом поколении P6 размер кэша составлял 32 кб, а частота достигла 450 МГц. Тех процесс был уменьшен до 180 нм.

Дальше компания начала выпускать процессоры на архитектуре NetBurst. Здесь использовалось 16 кб кэша первого уровня на каждое ядро, и до 2 Мб кэша второго уровня. Частота выросла до 3 ГГц, а техпроцесс остался на том же уровне — 180 нм. Уже здесь появились 64 битные процессоры, которые поддерживали адресацию большего количества памяти. Также было внесено множество расширений команд, а также добавлена технология Hyper-Threading, которая позволяла создавать два потока из одного ядра, что повышало производительность.

Естественно, каждая архитектура улучшалась со временем, увеличивалась частота и уменьшался техпроцесс. Также существовали и промежуточные архитектуры, но здесь все было немного упрощено, поскольку это не является нашей основной темой.

Intel Core

На смену NetBurst в 2006 году пришла архитектура Intel Core. Одной из причин разработки этой архитектуры была невозможность увеличения частоты в NetBrust, а также ее очень большое тепловыделение. Эта архитектура была рассчитана на разработку многоядерных процессоров, размер кэша первого уровня был увеличен до 64 Кб. Частота осталась на уровне 3 ГГц, но зато была сильно снижена потребляемая мощность, а также техпроцесс, до 60 нм.

Процессоры на архитектуре Core поддерживали аппаратную виртуализацию Intel-VT, а также некоторые расширения команд, но не поддерживали Hyper-Threading, поскольку были разработаны на основе архитектуры P6, где такой возможности еще не было.

Первое поколение  — Nehalem

Дальше нумерация поколений была начата сначала, потому что все следующие архитектуры — это улучшенные версии Intel Core. Архитектура Nehalem пришла на смену Core, у которой были некоторые ограничения, такие как невозможность увеличить тактовую частоту. Она появилась в 2007 году. Здесь используется 45 нм тех процесс и была добавлена поддержка технологии Hyper-Therading.

Процессоры Nehalem имеют размер L1 кэша 64 Кб, 4 Мб L2 кэша и 12 Мб кєша L3. Кэш доступен для всех ядер процессора. Также появилась возможность встраивать графический ускоритель в процессор. Частота не изменилась, зато выросла производительность и размер печатной платы.

Второе поколение — Sandy Bridge

Sandy Bridge появилась в 2011 году для замены Nehalem. Здесь уже используется техпроцесс 32 нм, здесь используется столько же кэша первого уровня, 256 Мб кэша второго уровня и 8 Мб кэша третьего уровня. В экспериментальных моделях использовалось до 15 Мб общего кэша.

Также теперь все устройства выпускаются со встроенным графическим ускорителем. Была увеличена максимальная частота, а также общая производительность.

Третье поколение — Ivy Bridge

Процессоры Ivy Bridge работают быстрее чем Sandy Bridge, а для их изготовления используется техпроцесс 22 нм. Они потребляют на 50% меньше энергии чем предыдущие модели, а также дают на 25-60% высшую производительность. Также процессоры поддерживают технологию Intel Quick Sync, которая позволяет кодировать видео в несколько раз быстрее.

Четвертое поколение — Haswell

Поколение процессора Intel Haswell было разработано в 2012 году. Здесь использовался тот же техпроцесс — 22 нм, изменен дизайн кэша, улучшены механизмы энергопотребления и немного производительность. Но зато процессор поддерживает множество новых разъемов: LGA 1150, BGA 1364, LGA 2011-3, технологии DDR4 и так далее. Основное преимущество Haswell в том, что она может использоваться в портативных устройствах из-за очень низкого энергопотребления.

Пятое поколение — Broadwell

Это улучшенная версия архитектуры Haswell, которая использует техпроцесс 14 нм. Кроме того, в архитектуру было внесено несколько улучшений, которые позволили повысить производительность в среднем на 5%.

Шестое поколение — Skylake

Следующая архитектура процессоров intel core — шестое поколение Skylake вышла в 2015 году. Это одно из самых значительных обновлений архитектуры Core. Для установки процессора на материнскую плату используется сокет LGA 1151, теперь поддерживается память DDR4, но сохранилась поддержка DDR3. Поддерживается Thunderbolt 3.0, а также шина  DMI 3.0, которая дает в два раза большую скорость. И уже по традиции была увеличенная производительность, а также снижено энергопотребление.

Седьмое поколение — Kaby Lake

Новое, седьмое поколение Core — Kaby Lake вышло в этом году, первые процессоры появились в середине января. Здесь было не так много изменений. Сохранен техпроцесс 14 нм, а также тот же сокет LGA 1151. Поддерживаются планки памяти DDR3L SDRAM и DDR4 SDRAM, шины PCI Express 3.0, USB 3.1. Кроме того, была немного увеличена частота, а также уменьшена плотность расположения транзисторов. Максимальная частота 4,2 ГГц.

Дальше компания планирует переход на техпроцесс 10 нм и это поколение процессоров intel будет называться CanonLake. Но пока что Intel к этому не готова.

Поэтому в 2017 планируется еще выпустить улучшенную версию SkyLake под кодовым именем Coffe Lake. Также, возможно, будут и другие микроархитектуры процессора Intel пока компания полностью освоит новый техпроцесс. Но обо всем этом мы узнаем со временем.

1203700cookie-checkАрхитектуры процессора intel за все времяno

Похожее

Автор публикации

не в сети 2 недели

ViGo

Комментарии: 5Публикации: 1063Регистрация: 29-04-2020

Архитектура процессора (Реферат) — TopRef.ru

Технический университет Молдовы

РЕФЕРАТ ПО ПРОГРАММИРОВАНИЮ

ТЕМА: Память и архитектура процессора

Факультет CIM

Группа С — 092

Подготовил Плис Владимир.

Кишинёв 1999 г.

План:

Введение.

  1. Историческая ретроспектива.

  2. Архитектурное развитие.

  3. Процесс производства.

  4. Программная совместимость.

  5. Обзор процессоров.

Будущие разработки Intel.

Процессор, или более полно микропроцессор, а также часто называемый ЦПУ (CPU — central processing unit) является центральным компонентом компьютера. Это разум, который управляет, прямо или косвенно, всем происходящим внутри компьютера.

Когда фон Нейман впервые предложил хранить последовательность инструкций, так называемые программы, в той же памяти, что и данные, это была поистине новаторская идея. Опубликована она в «First Draft of a Report on the EDVAC» в 1945 году. Этот отчет описывал компьютер состоящим из четырех основных частей: центрального арифметического устройства, центрального управляющего устройства, памяти и средств ввода-вывода.

Сегодня, более полувека спустя, почти все процессоры имеют фон-неймановскую архитектуру.

Историческая ретроспектива

Как известно, все процессоры персональных компьютеров основаны на оригинальном дизайне Intel. Первым применяемым в PC процессором был интеловский чип 8088. В это время Intel располагал выпущенным ранее более мощным процессором 8086. 8088 был выбран по соображениям экономии: его 8-битная шина данных допускала более дешевые системные платы, чем 16-битная у 8086. Также во время проектирования первых PC большинство доступных интерфейсных микросхем использовали 8-битный дизайн. Те первые процессоры даже не приближаются к мощи, достаточной для запуска современных приложений.

В таблице ниже приведены основные группы интеловских процессоров от первой генерации 8088/86 до шестого поколения Pentium Pro и Pentium II:

Тип/
Поколение

Дата

Ширина шины данных/
адреса

Внутренний кэш

Скорость шины памяти
(MHz)

Внутренняя частота
(MHz)

8088/ First

1979

8/20 bit

None

4. 77-8

4.77-8

8086/ First

1978

16/20 bit

None

4.77-8

4.77-8

80286/ Second

1982

16/24 bit

None

6-20

6-20

80386DX/ Third

1985

32/32 bit

None

16-33

16-33

80386SX/ Third

1988

16/32 bit

8K

16-33

16-33

80486DX/ Fourth

1989

32/32 bit

8K

25-50

25-50

80486SX/ Fourth

1989

32/32 bit

8K

25-50

25-50

80486DX2/ Fourth

1992

32/32 bit

8K

25-40

50-80

80486DX4/ Fourth

1994

32/32 bit

8K+8K

25-40

75-120

Pentium/ Fifth

1993

64/32 bit

8K+8K

60-66

60-200

MMX/ Fifth

1997

64/32 bit

16K+16K

66

166-233

Pentium Pro/ Sixth

1995

64/36 bit

8K+8K

66

150-200

Pentium II/ Sixth

1997

64/36 bit

16K+16K

66

233-300

Третье поколение процессоров, основанных на Intel 80386SX и 80386DX, были первыми применяемыми в PC 32-битными процессорами. Основным отличием между ними было то, что 386SX был 32-разрядным только внутри, поскольку он общался с внешним миром по 16-разрядной шине. Это значит, что данные между процессором и остальным компьютером перемещались на вполовину меньшей скорости, чем у 486DX.

Четвертая генерация процессоров была также 32-разрядной. Однако все они предлагали ряд усовершенствований. Во-первых, был полностью пересмотрен весь дизайн 486 поколения, что само по себе удвоило скорость. Во-вторых, все они имели 8kb внутреннего кэша, прямо у процессорной логики. Такое кэширование передачи данных от основной памяти значило, что среднее ожидание процессора запросов к памяти на системной плате сократилось до 4%, поскольку, как правило, необходимая информация уже находилась в кэше.

Модель 486DX отличалась от 486SX только поставляемым внутри математическим сопроцессором. Этот отдельный процессор спроектирован для проведения операций над числами с плавающей точкой. Он мало применяется в каждодневных приложениях, но кардинально меняет производительность числовых таблиц, статистического анализа, систем проектирования и так далее.

Важной инновацией было удвоение частоты, введенное в 486DX2. Это значит что внутри процессор работает на удвоенной по отношению ко внешней электронике скоростью. Данные между процессором, внутренним кэшем и сопроцессором передаются на удвоенной скорости, приводя к сравнимой прибавке в производительности. 486DX4 развил эту технологию дальше, утраивая частоту до внутренних 75 или 100MHz, а также удвоив объем первичного кэша до 16kb.

Pentium, определив пятое поколение процессоров, значительно превзошел в производительности предшествующие 486 чипы благодаря нескольким архитектурным изменениям, включая удвоение ширины шины до 64 бит. P55C MMX сделал дальнейшие значительные усовершенствования, удвоив размер первичного кэша и расширив набор инструкций оптимизированными для мультимедиа приложений операциями.

Pentium Pro, появившись в 1995 году как наследник Pentium, был первым в шестом поколении процессоров и ввел несколько архитектурных особенностей, не встречавшихся ранее в мире PC. Pentium Pro стал первым массовым процессором, радикально изменившим способ выполнения инструкций переводом их в RISC-подобные микроинструкции и выполнением их в высокоразвитом внутреннем ядре. Он также замечателен значительно более производительным вторичным кэшем относительно всех прежних процессоров. Вместо использования базирующегося на системной плате кэша, работающего на скорости шины памяти, он использует интегрированный кэш второго уровня на своей собственной шине, работающей на полной частоте процессора, обычно в три раза быстрее кэша на Pentium-системах.

Следующий новый чип после Pentium Pro Intel представил спустя почти полтора года — появился Pentium II, давший очень большой эволюционный шаг от Pentium Pro. Это распалило спекуляции, что одна из основных целей Intel в производстве Pentium II был уход от трудностей в изготовлении дорогого интегрированного кэша второго уровня в Pentium Pro. Архитектурно Pentium II не очень отличается от Pentium Pro с подобным эмулирующим x86 ядром и большинством схожих особенностей.

Pentium II улучшил архитектуру Pentium Pro удвоением размера первичного кэша до 32kb, использованием специального кэша для увеличения эффективности 16-битной обработки, (Pentium Pro оптимизирован для 32-битных приложений, а с 16-битным кодом не обращается столь же хорошо) и увеличением размеров буферов записи. Однако о основной темой разговоров вокруг новых Pentium II была его компоновка. Интегрированный в Pentium Pro вторичный кэш, работающий на полной частоте процессора, был заменен в Pentium II на малую схему, содержащую процессор и 512kb вторичного кэша, работающего на половине частоты процессора. Собранные вместе, они заключены в специальный одностороний картридж (single-edge cartridge — SEC), предназначенный для вставления в 242-пиновый разъем (Socket 8) на нового стиля системных платах Pentium II.

Основная структура

Основные функциональные компоненты процессора

  • Ядро: Сердце современного процессора — исполняющий модуль. Pentium имеет два параллельных целочисленных потока, позволяющих читать, интерпретировать, выполнять и отправлять две инструкции одновременно.

  • Предсказатель ветвлений: Модуль предсказания ветвлений пытается угадать, какая последовательность будет выполняться каждый раз когда программа содержит условный переход, так чтобы устройства предварительной выборки и декодирования получали бы инструкции готовыми предварительно.

Философия архитектуры российского процессора Эльбрус. В чём его фишка? | Электромозг

Ура! В связи с недавно прошедшим 8-м марта поздравляю всех женщин с этим весенним праздником! Если есть тут такие, конечно, среди моих читателей, чья область интересов лежит, в том числе, и в плоскости вычислительной техники 🙂

Ну а теперь, собственно, про Эльбрус…

Многие, наверно, уже неоднократно слышали о том, что отличительной особенностью архитектуры процессоров Эльбрус является сверхдлинное машинное слово (VLIW). Но что это такое? Объясняю… на пальцах (С) )))

В общем, смысл такой. Для ускорения работы современных процессоров применяется метод распараллеливания операций — те команды, которые не зависят друг от друга, можно выполнить одновременно, за один такт.

Обычные процессоры x86 делают такое распараллеливание на лету, аппаратно. То есть, когда на конвейер процессора поступает некоторая цепочка команд, она раскладывается на более примитивные операции, распараллеливается по ступенькам конвейера, насколько это возможно, и срезы этого конвейера начинают выполняться. По мере выполнения команд, в конвейер поступают новые команды. То есть, вся работа по распараллеливанию лежит на процессоре, требует питания и выделяет дополнительное тепло. Кроме того, процессор видит лишь тот маленький кусочек кода, который находится в конвейере, и действует в его границах.

В Эльбрусах применён другой подход. В нём вся работа по распараллеливанию вынесена в компилятор, и процессору на вход подаются уже распараллеленные команды. Процессор не тратит энергию на аппаратное распараллеливание на лету, снижается выделение тепла.

Кроме всего прочего, распараллеливание компилятор может делать более качественно, чем это делает процессор на лету, потому что у него объективно больше информации о программе. Если процессор видит только небольшой кусочек кода, то компилятору доступен весь код приложения целиком.

Как любитель фотографии, я могу провести следующую аналогию. Любительский цифровой фотографирует и на лету сохраняет фото сразу в файл jpg. Все преобразования информации изображения он делает сам. Профессиональное же использование зеркалки подразумевает сохранение в сырой RAW-файл (исходник), и уже в комфортных условиях, на компьютере, обладая намного большими аппаратными и временнЫми ресурсами, RAW-конвертер преобразовывает сохранённую информацию об изображении в само конечное изображение. То есть, вся обработка того, что получено с матрицы фотоаппарата, вынесена из него наружу и обрабатывается во вне. Так же и с процессором, только последовательность будет обратная.

Философия архитектуры Эльбрус такая — всё, что можно сделать с кодом до того, как он поступит в процессор, имеет смысл сделать заранее. Этим самым повышается степень распараллеливания кода. Зачем нагружать процессор лишней работой, которую можно сделать при компиляции.

Конечно, есть и нерешённые ещё трудности такого подхода. Это и создание достаточно умного компилятора, который бы, например, мог максимально эффективно раскидывать последовательные цепочки команд, где каждая из последующих использует результат предыдущей, по разным тактам, и решение задачи быстрого переключения контекста, и т.п. Но всё это решаемо, если над этим продолжать работать.

Почему конкуренты отказались от VLIW?

Если всё так перспективно, то почему этоuj не делает Intel? Ну, во-первых, он пытался это делать в серверном процессоре Itanium. Но в Itanium эта архитектура была сильно упрощена (IA-64). Процессор мог выполнять только 6 операций за такт, тогда как Эльбрус — до 25 операций, а сегодня и плюс 41 операции в векторном режиме.

Кроме того, для использования даже этих скромных возможностей, ПО для Itanium надо было оптимизировать. В неоптимизированном ПО производительность у первого варианта Itanium была ниже процессоров классической архитектуры в 8 раз. Это, конечно, отрицательно сказалось на его продажах. К

Компилятор для Itanium тоже был далёк от совершенства (у Эльбруса на текущий момент он намного более продвинут).

Itanium пережил несколько модернизаций, но в конце концов проект был заморожен. Разработчики в рамках архитектуры Itanium не смогли решить ряд технических проблем для полного раскрытия потенциала своей архитектуры, а на более значительные её изменения они не пошли. Сильно упираться в Itanium, давя им успешную на тот момент архитектуру x86, смысла не было, а навредить бизнесу могло.

Почему у нас нет другого выхода?

Итак, мы в России имеем только одну в полной мере собственную архитектуру процессора, не купленную, школа проектирования которой находится у нас. Эта архитектура, как и любая другая, имеет свои сильные и слабые стороны. Другой своей архитектуры у нас нет. А это означает, что мы обречены работать с тем, что есть, выжимая максимум именно из неё.

Нам нужно по-максимуму использовать все плюсы этой архитектуры и, упёршись рогом, решить все её проблемы. У Intel была альтернатива и огромный массив ПО, который их и кормил. Поэтому там задачу с VLIW до конца не решили. Не потому, что не было решения, а потому что было много рисков при конкуренции с имеющейся архитектурой. Например, риск банальной потери рынка.

У нас риска потери рынка нет за неимением рынка, как такового. А это означает, что все те известные проблемы архитектуры Эльбрус так или иначе обречены на своё решение.

А вы как думаете, к какому году десктопные Эльбрус сравняются с наиболее популярными десктопными Intel? Я вот думаю, что в 2027-2028 годах уже станет всё не так однозначно 🙂

Пишите свои мысли в комментариях, ставьте лайки, подписывайтесь на канал. Удачи!

Intel представила линейку процессоров 11-го поколения на новой архитектуре | Новости

Состоялся полный анонс процессоров Intel Core 11-го поколения для настольных ПК. Они выполнены на новой микроархитектуре Cypress Cove — она сменила Skylake, которая использовалась на протяжении пяти лет.

Новые процессоры подключаются с помощью разъёма LGA1200, который также использовался в десятом поколении. Однако только часть старых материнских плат будут поддерживать Cypress Cove. При этом техпроцесс в 14 нм сохранился, хотя Intel отмечает, что архитектура похожа на ту, что использовалась в 10-нм процессорах для ноутбуков.

Линейка включает 19 моделей. Все они оснащены встроенной графикой UHD Graphics 750, кроме самых бюджетных вариантов — на все разновидности шестиядерных Core i5-11400 с частотой 2,6-4,4 ГГц установят UHD Graphics 730. Флагманский восьмиядерный процессор Intel Core i9-11900K будет работать на частоте 3,3-5,2 ГГц. Его рекомендованная цена составит $539 (~₽40 тыс.), а бюджетный i5-11400 обойдётся в $182 (~₽14 тыс.).

Тестирование Intel показало, что прирост производительности на новых CPU по сравнению с прошлым поколением в четырёх играх (Total War: Three Kingdoms, Gears 5, Grid 5 и Microsoft Flight Simulator) составил 8-14% на разрешении Full HD. Если же сравнивать с флагманским продуктом AMD — Ryzen 9 5900X, — то, по заверению представителей Intel, их новинка будет на 3-11% быстрее. Продажи стартовали 17 марта.

1/2 Характеристики процессоров Intel Core 11-го поколения на архитектуре Cypress Cove | Источник: Intel Не забудь поделиться с друзьями: Архитектура процессора

, что это значит?

Вот краткое описание терминов:

x86 — это 32-битный набор инструкций, представленный в паре процессоров Intel 80386/387. AMD также выпускала совместимые процессоры.

x64/AMD64 — это набор инструкций, представленный в процессоре Intel Pentium. Это 64-битное расширение набора инструкций x86. Windows называет это AMD64, поскольку первый 64-битный порт Windows был построен на системе Compaq Computer Corporation, работающей под управлением процессора AMD.

IA64/Itanium — это набор инструкций для процессора Intel Itanium. Некоторое время использовался в Windows NT 4, а также для OpenVMS и серверов HP Integrity Server под управлением Linux и OpenVMS.

Alpha — Корпорация Digital Equipment разработала свой оригинальный процессор VAX. Производство закончилось в 2010 г., но системы, работающие под управлением OpenVMS на этом процессоре, поддерживаются HP до 2020 г.

CISC/RISC — вычисления со сложным/сокращенным набором инструкций. Процессоры CISC имеют переменную длину и широкие инструкции.Процессоры RISC имеют более короткие процессоры постоянной длины. Большинство процессоров теперь являются RISC внутренне, даже если они реализуют набор инструкций в стиле CISC.

ARM — машина Acorn или Advanced RISC; маломощные процессоры, лицензированные несколькими компаниями из ARM Holdings. Они часто встречаются в мобильных устройствах, таких как смартфоны и планшеты меньшего размера.

PowerPC — процессор RISC, разработанный IBM, созданный для конкуренции с процессорами Intel x64 CISC. Несколько вариантов использовались в AS/400 и других системах на базе IBM.

MIPS — лицензионный вариант процессора PowerPC

Intel Core — современные процессоры Intel x64

Xeon — процессоры Intel x64, разработанные специально для серверных приложений, чтобы конкурировать с процессором PowerPC.

Процессоры Motorola 6502 (16-разрядные) и 6000 (32-разрядные). 6502 был процессором в компьютере Apple II. 6000 был последующим 32-битным процессором. Это были процессоры RISC, которые составляли основную конкуренцию процессорам Intel 8086/8088 и 80386 CISC.

Процессоры Sun SPARC (теперь принадлежащие Oracle) управляли многими системами Unix.

Был ли этот пост полезен? палец вверх thumb_down

Intel представляет большие изменения в архитектуре процессора

В настоящее время существует около 440 ядерных реакторов работают по всему миру, которые вместе могут генерировать около 400 гигаватт энергии при нулевом выбросе углерода. Тем не менее, эти установки деления, при всей их ценности, имеют существенные недостатки. Обогащенное урановое топливо, которое они используют, должно храниться в безопасности.Разрушительные аварии, подобные той, что произошла на Фукусиме в Японии, могут сделать районы непригодными для жизни. Побочные продукты ядерных отходов необходимо безопасно утилизировать, и они остаются радиоактивными в течение тысяч лет. Следовательно, правительства, университеты и компании уже давно рассматривают термоядерный синтез для лечения этих недугов.

Среди заинтересованных сторон — НАСА. У космического агентства есть значительные потребности в энергии для путешествий в дальний космос, включая зонды и пилотируемые миссии на Луну и Марс. Уже более 60 лет, фотогальванические элементы, топливные элементы или радиоизотопные термоэлектрические генераторы (РТГ) обеспечивали питание космических аппаратов.РИТЭГи, работающие на тепле, выделяемом при распаде неделящегося плутония-238, продемонстрировали превосходную долговечность — оба зонда «Вояджер» используют такие генераторы и остаются в рабочем состоянии, например, почти 45 лет после запуска. Но эти генераторы преобразуют тепло в электричество с КПД примерно 7,5%. А современным космическим кораблям требуется больше энергии, чем может обеспечить РИТЭГ разумных размеров.

Одной из многообещающих альтернатив является синтез в решетке (LCF), тип синтеза, при котором ядерное топливо связано в металлической решетке.Ограничение способствует слиянию положительно заряженных ядер, потому что высокая плотность электронов в проводящем металле снижает вероятность того, что два ядра будут отталкивать друг друга по мере их сближения.

Дейтерированный эрбий (химический символ ErD 3 ) помещают во флаконы размером с большой палец, как показано на этом наборе образцов из эксперимента 20 июня 2018 года. Здесь флаконы выстроены перед экспериментом, с салфетками поверх металла, чтобы удерживать металл на месте во время эксперимента.Металл начал трескаться и распадаться на части, указывая на то, что он полностью насыщен. НАСА

Флаконы перевернуты вверх дном, чтобы совместить металл с лучом гамма-излучения. Гамма-лучи окрасили прозрачное стекло в янтарный цвет. НАСА

Мы и другие ученые и инженеры в Исследовательский центр Гленна НАСА в Кливленде изучает, сможет ли этот подход когда-нибудь обеспечить достаточную мощность, например, для работы небольших роботизированных зондов на поверхности Марса.LCF устранит потребность в расщепляющихся материалах, таких как обогащенный уран, получение которых может быть дорогостоящим и сложным в безопасном обращении. LCF обещает быть дешевле, меньше и безопаснее, чем другие стратегии использования ядерного синтеза. И по мере развития технологии она также может найти применение здесь, на Земле, например, для небольших электростанций для отдельных зданий, что уменьшит зависимость от ископаемого топлива и повысит отказоустойчивость сети.

Физики давно считали, что термоядерный синтез должен обеспечивать чистую ядерную энергию.Ведь солнце таким образом вырабатывает энергию. Но у солнца есть огромное преимущество в размерах. При диаметре почти 1,4 миллиона километров, с плазменным ядром, в 150 раз более плотным, чем жидкая вода, и нагретым до 15 миллионов °C, Солнце использует тепло и гравитацию, чтобы сталкивать частицы вместе и поддерживать свою термоядерную печь.

На Земле у нас нет возможности производить энергию таким образом. Термоядерный реактор должен достичь критического уровня плотности топливных частиц, времени удержания и температуры плазмы (называемой Критерии Лоусона в честь создателя Джона Лоусона) для достижения чистого положительного выхода энергии.И пока этого никто не сделал.

В термоядерных реакторах обычно используются два разных изотопа водорода: дейтерий (один протон и один нейтрон) и тритий (один протон и два нейтрона). Они сливаются в ядра гелия (два протона и два нейтрона) — также называемые альфа-частицами — с оставшимся несвязанным нейтроном.

Существующие термоядерные реакторы полагаются на образующиеся альфа-частицы и энергию, высвобождаемую в процессе их создания, для дальнейшего нагрева плазмы.Затем плазма будет запускать больше ядерных реакций с конечной целью обеспечения чистого прироста мощности. Но есть пределы. Даже в самой горячей плазме, которую могут создать реакторы, альфа-частицы в основном пропускают дополнительные ядра дейтерия, не передавая много энергии. Чтобы термоядерный реактор был успешным, он должен создать как можно больше прямых столкновений между альфа-частицами и ядрами дейтерия.

В 1950-х годах ученые создали различные термоядерные устройства с магнитным удержанием, наиболее известными из которых были Токамак Андрея Сахарова и стелларатор Лаймана Спитцера.Оставляя в стороне различия в конструктивных особенностях, каждая из них пытается сделать практически невозможное: нагреть газ до такой степени, чтобы он превратился в плазму, и сжать его магнитным полем, достаточным для того, чтобы зажечь термоядерный синтез, и все это без выхода плазмы.

В 1970-х годах последовали термоядерные устройства с инерционным удержанием. Они использовали лазеры и ионные лучи либо для сжатия поверхности мишени при имплозии с прямым приводом, либо для возбуждения внутреннего контейнера мишени при имплозии с непрямым приводом. В отличие от реакций с магнитным ограничением, которые могут длиться секунды или даже минуты (и, возможно, один день, бесконечно), реакции синтеза с инерционным удержанием длятся менее микросекунды, прежде чем мишень разберется, тем самым завершив реакцию.

Оба типа устройств могут создавать термоядерный синтез, но пока они не способны генерировать достаточно энергии, чтобы компенсировать то, что необходимо для инициирования и поддержания ядерных реакций. Другими словами, больше энергии поступает, чем выходит. Гибридные подходы, в совокупности называемые магнито-инерционным синтезом, сталкиваются с теми же проблемами.

Современные термоядерные реакторы также требуют больших количеств трития в составе топливной смеси. Наиболее надежным источником трития является деления реактора , что несколько противоречит цели использования термоядерного синтеза.

Фундаментальная проблема этих методов заключается в том, что атомные ядра в реакторе должны быть достаточно энергичными — то есть достаточно горячими — для преодоления кулоновского барьера, естественной тенденции положительно заряженных ядер отталкиваться друг от друга. Из-за кулоновского барьера сливающиеся атомные ядра имеют очень маленькое поперечное сечение слияния, а это означает, что вероятность слияния двух частиц мала. Вы можете увеличить поперечное сечение, повысив температуру плазмы до 100 миллионов градусов по Цельсию, но это требует все более героических усилий по удержанию плазмы.В нынешнем виде, после миллиардов долларов инвестиций и десятилетий исследований, этим подходам, которые мы назовем «горячим синтезом», еще предстоит пройти долгий путь.

Барьеры для горячего синтеза здесь, на Земле, действительно огромны. Как вы можете себе представить, они будут еще более подавляющими на космическом корабле, который не может нести на борту токамак или стелларатор. Реакторы деления рассматриваются в качестве альтернативы — НАСА успешно испытало реактор деления Kilopower на объекте национальной безопасности в Неваде в 2018 году с использованием активной зоны из урана-235 размером с рулон бумажных полотенец.Реактор Kilopower мог производить до 10 киловатт электроэнергии. Недостатком является то, что для этого требовался высокообогащенный уран, что вызвало бы дополнительные проблемы с безопасностью запуска. Это топливо также стоит немало.

Но термоядерный синтез все еще может работать, даже если традиционные подходы горячего синтеза не дают старта. Технология LCF может быть достаточно компактной, достаточно легкой и достаточно простой, чтобы ее можно было использовать для космических кораблей.

Как работает ЖКФ? Помните, что ранее мы упоминали дейтерий, изотоп водорода с одним протоном и одним нейтроном в ядре.Дейтерированные металлы — эрбий и титан в наших экспериментах — были «насыщены» либо дейтерием, либо атомами дейтерия, лишенными своих электронов (дейтронов). Это возможно, потому что металл естественным образом существует в регулярно расположенной решеточной структуре, которая создает одинаково правильные щели между атомами металла для гнездования дейтронов.

В токамаке или стеллараторе горячая плазма ограничена плотностью 10 14 дейтрона на кубический сантиметр. Термоядерные устройства с инерционным удержанием могут на мгновение достичь плотности 10 26 дейтронов на кубический сантиметр.Оказывается, такие металлы, как эрбий, могут сколь угодно долго удерживать дейтроны с плотностью около 10 23 на кубический сантиметр, что намного выше, чем плотность, которая может быть достигнута в устройстве магнитного удержания, и всего на три порядка ниже той, которая достигается в магнитных ловушках. инерционно-удерживающее устройство. Важно отметить, что эти металлы могут удерживать такое количество ионов при комнатной температуре.

Насыщенный дейтронами металл образует плазму с нейтральным зарядом. Металлическая решетка удерживает дейтроны и экранирует их от электронов, не позволяя каждому из них «видеть» соседние дейтроны (все они заряжены положительно).Это экранирование увеличивает шансы более прямых попаданий, что еще больше способствует реакции синтеза. Без экранирования электронов два дейтрона с гораздо большей вероятностью отталкивались бы друг от друга.

Используя металлическую решетку, экранирующую плотную холодную плазму дейтронов, мы можем ускорить процесс синтеза, используя то, что называется Электронно-лучевой ускоритель «Динамитрон». Электронный луч попадает на танталовую мишень и производит гамма-лучи, которые затем облучают пузырьки размером с большой палец, содержащие дейтерид титана или дейтерид эрбия.

Когда гамма-луч достаточной энергии — около 2,2 мегаэлектронвольт (МэВ) — попадает в один из дейтронов в металлической решетке, дейтрон распадается на составляющие его протон и нейтрон. Высвобожденный нейтрон может столкнуться с другим дейтроном, ускоряя его так же, как бильярдный кий ускоряет шар при ударе о него. Затем этот второй, энергичный дейтрон проходит через один из двух процессов: экранированный синтез или реакцию отрыва.

При экранированном синтезе, который мы наблюдали в наших экспериментах, энергичный дейтрон сливается с другим дейтроном в решетке.Реакция синтеза приведет либо к ядру гелия-3 и оставшемуся нейтрону, либо к ядру водорода-3 и оставшемуся протону. Эти продукты синтеза могут сливаться с другими дейтронами, создавая альфа-частицу, или с другим ядром гелия-3 или водорода-3. Каждая из этих ядерных реакций высвобождает энергию, помогая запустить больше случаев синтеза.

В реакции отрыва атом, такой как титан или эрбий в наших экспериментах, отрывает протон или нейтрон от дейтрона и захватывает этот протон или нейтрон.Эрбий, титан и другие более тяжелые атомы преимущественно поглощают нейтрон, потому что протон отталкивается положительно заряженным ядром (так называемая реакция Оппенгеймера-Филлипса). Теоретически возможно, хотя мы этого и не наблюдали, что экранирование электронов может позволить захватить протон, превратив эрбий в тулий или титан в ванадий. Оба вида реакций отщепления производили бы полезную энергию.

В нынешнем виде, после миллиардов долларов инвестиций и десятилетий исследований, этим подходам, которые мы назовем «горячим синтезом», еще предстоит пройти долгий путь.

Чтобы убедиться , что мы действительно производили синтез в наших пузырьках дейтерида эрбия и дейтерида титана, мы использовали нейтронную спектроскопию. Этот метод обнаруживает нейтроны, возникающие в результате термоядерных реакций. Когда в результате дейтрон-дейтронного синтеза образуется ядро ​​гелия-3 и нейтрон, этот нейтрон имеет энергию 2,45 МэВ. Поэтому, когда мы обнаружили нейтроны с энергией 2,45 МэВ, мы знали, что произошел синтез. Именно тогда мы опубликовали наши первоначальные результаты в Physical Review C. .

Электронное экранирование позволяет кажутся , как если бы дейтроны сливались при температуре 11 миллионов °C.В действительности металлическая решетка остается намного холоднее, хотя и несколько нагревается по сравнению с комнатной температурой по мере слияния дейтронов.

Рич Мартин (слева), инженер-исследователь, и соавтор Брюс Стейнец, главный исследователь эксперимента-предшественника проекта LCF, исследуют образцы после запуска. НАСА

В целом, в LCF большая часть нагрева происходит в областях размером всего в десятки микрометров. Это намного эффективнее, чем в термоядерных реакторах с магнитным или инерционным удержанием, которые нагревают все количество топлива до очень высоких температур.LCF — это не холодный синтез — для него по-прежнему требуются энергичные дейтроны, и для их нагрева могут использоваться нейтроны. Однако LCF также устраняет многие технологические и инженерные барьеры, которые мешали успеху других схем термоядерного синтеза.

Хотя метод отдачи нейтронов, который мы использовали, является наиболее эффективным средством передачи энергии холодным дейтронам, производство нейтронов с помощью динамитрона требует больших затрат энергии. Существуют и другие, более низкоэнергетические методы получения нейтронов, включая использование источника изотопных нейтронов, такого как америций-бериллий или калифорний-252, для инициирования реакций.Нам также необходимо сделать реакцию самоподдерживающейся, что может быть возможно с помощью отражателей нейтронов, чтобы отражать нейтроны обратно в решетку — примерами распространенных отражателей нейтронов являются углерод и бериллий. Другой вариант — соединить источник нейтронов синтеза с ядерным топливом, чтобы использовать лучшее из обоих миров. Несмотря на это, требуется дальнейшее развитие процесса, необходимого для повышения эффективности этих ядерных реакций, ограниченных решеткой.

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

Мы не одиноки в этих усилиях. Исследователи в Национальная лаборатория Лоуренса Беркли в Калифорнии при финансовой поддержке Google Research добилась благоприятных результатов с аналогичной установкой для термоядерного синтеза с электронным экраном.Исследователи из Центра надводных боевых действий ВМС США, Индийское головное подразделение в Мэриленде, также получили многообещающие первоначальные результаты, используя электрохимический подход к LCF. Предстоят также конференции: конференция Американского ядерного общества по ядерным и новым технологиям для космоса в Кливленде в мае и Международная конференция по холодному синтезу 24, посвященная твердотельной энергетике, в Маунтин-Вью, Калифорния, в июле.

Любое практическое применение LCF потребует эффективных самоподдерживающихся реакций.Наша работа представляет собой лишь первый шаг к реализации этой цели. Если скорость реакции может быть значительно увеличена, LCF может открыть совершенно новую дверь для производства чистой ядерной энергии как для космических миссий, так и для многих людей, которые могли бы использовать ее здесь, на Земле.

Статьи с вашего сайта

Связанные статьи в Интернете

ProcessorArchitecture Enum (System.Reflection) | Документы Майкрософт

Полезна ли эта страница?

да Нет

Любая дополнительная обратная связь?

Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.

Представлять на рассмотрение

Определение

Важный

Некоторая информация относится к предварительному выпуску продукта, который может быть существенно изменен перед его выпуском. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.

Идентифицирует процессор и бит на слово платформы, на которую нацелен исполняемый файл.

В этой статье

  общедоступный класс enum ProcessorArchitecture  
  общедоступное перечисление ProcessorArchitecture  
  [System.Runtime.InteropServices.ComVisible(true)]
[Система.Сериализуемый]
общественное перечисление ProcessorArchitecture  
  тип ProcessorArchitecture =  
  []
[]
введите ProcessorArchitecture =  
  Public Enum ProcessorArchitecture  
Наследство
Атрибуты

Поля

Амд64 4

64-битный процессор на базе архитектуры x64.

Рука 5

Процессор ARM.

IA64 3

Только 64-разрядный процессор Intel Itanium.

MSIL 1

Нейтральный по отношению к процессору и битам в слове.

Никто 0

Неизвестная или неуказанная комбинация процессора и количества битов в слове.

Х86 2

32-разрядный процессор Intel, либо собственный, либо в среде Windows в среде Windows на 64-разрядной платформе (WOW64).

Примечания

Не все комбинации PortableExecutableKinds и ImageFileMachine описывают допустимые типы файлов PE. ProcessorArchitecture — это набор комбинаций PortableExecutableKinds и ImageFileMachine, которые описывают допустимые типы PE-файлов для управляемого кода.

Относится к

Intel представляет большие изменения в архитектуре процессора — Компьютерная инженерия

На этой неделе Intel представила то, что старший вице-президент и генеральный директор Раджа Кодури назвал крупнейшим достижением компании в области процессоров за десятилетие. Они включали две новые архитектуры ядер ЦП x86 — с прямым названием Performance-core (P-core) и Efficient-core (E-core). Ядра интегрированы в Alder Lake, «гибридное» семейство процессоров, которое включает в себя новые технологии, позволяющие грядущей ОС Windows 11 более эффективно запускать процессоры.

Поскольку традиционные способы увеличения плотности логики на микросхеме теряют мощность, архитектура процессора — по сути, то, как компьютер фактически выполняет свою работу, — должна будет нести большую нагрузку. «Сейчас прекрасное время для того, чтобы стать компьютерным архитектором, — говорит Кодури. Новые архитектуры и SoC, представленные Intel, «демонстрируют, как архитектура будет удовлетворять острую потребность в большей вычислительной производительности, поскольку рабочие нагрузки от настольных компьютеров до центров обработки данных становятся больше, сложнее и разнообразнее, чем когда-либо», — говорит он.

Два новых ядра x86 предназначены для разных ролей, но выполняют один и тот же набор инструкций и предназначены для объединения, как это будет в будущей линейке процессоров Alder Lake. На первый взгляд эта комбинация похожа на энергосберегающую архитектуру Arm big.LITTLE, в которой низкоприоритетная работа выполняется небольшим процессорным ядром с низким энергопотреблением, а требовательные вычисления выполняются более производительным ядром. Но Intel говорит, что способ, которым Alder Lake использует сочетание ядер, больше ориентирован на повышение производительности за счет использования всех ядер для рабочих нагрузок с большим количеством потоков.(Поток — это наименьший бит программы, который может быть назначен ресурсу в процессоре.) Эффективные ядра могут обрабатывать один поток за раз, а производительное ядро ​​может выполнять многопоточность.

Настольные, мобильные и ультрамобильные устройства [слева направо] имеют различное сочетание ядер мощности [темно-синий] и ядер эффективности [светло-синий]. Изображение: Intel

Многие инновации в обоих ядрах были связаны с ускорением той части ядра, которая отвечает за инструкции.Они декодируют больше инструкций за такт, часто используемые держат рядом, чтобы сэкономить время, и лучше предсказывают, какие инструкции будут следующими в программе.

Вместе с множеством других технологий ядро ​​на 40 % более эффективно при той же частоте или на 40 % лучше при том же энергопотреблении по сравнению с текущим ядром Intel SkyLake для одного потока. Эти цифры вырастают до 80 процентов по сравнению с четырьмя ядрами Efficient, работающими с четырьмя потоками, и двумя ядрами Sklylake, работающими с четырьмя потоками.

Новая архитектура Performance-core предназначена для раскрытия дополнительных возможностей параллелизации при одновременном снижении задержки. Это приводит к повышению производительности в среднем на 19 процентов в наборе тестов производительности по сравнению с ядром Cypress Cove, когда оба работают на частоте 3,3 гигагерца.

В Alder Lake новые ядра были объединены в три различные конфигурации, что означало, что они охватывают как настольные компьютеры, так и «ультрамобильные» приложения — потребляющие от 125 Вт до 9 Вт. Настольная SoC работает с 8 P-ядрами и 8 E-ядрами, обрабатывает до 24 потоков одновременно и содержит до 30 мегабайт кэш-памяти.Мобильная версия имеет до 6 P-ядер и 8 E-ядер, а ультрамобильная — 2 P-ядра и 8 E-ядер. SoC производятся по техпроцессу Intel 7.

Чтобы эта комбинация ядер работала вместе наилучшим образом, работа должна быть назначена каждому из них таким образом, чтобы максимизировать производительность в любых условиях, в которых работает ЦП. Ядро планировщика потоков операционной системы обычно выполняет эту задачу, но сегодня оно делает это с небольшим количеством информации о состоянии ядер и работает на довольно простом уровне, например, является ли задача передним планом, как игра, или фоновым, как проверка для Новый email-адрес.Решения ядра планировщика операционной системы «оказывают огромное влияние на воспринимаемую пользователем производительность и энергопотребление», — говорит Мехмет Иигун, менеджер по развитию партнеров в Microsoft. [ПОДРОБНЕЕ]

Понимание микроархитектуры ЦП для повышения производительности

Стенограмма

Это доклад на тему «Понимание микроархитектуры ЦП для максимальной производительности». На самом деле мы собираемся говорить о том, что происходит внутри процессора, что там происходит с его частями, как это связано с остальной системой, как работает подсистема памяти, как работает кэширование. работа и так далее.Мы рассмотрим имеющиеся у нас инструменты для анализа того, как мы можем ускорить работу нашего процессора.

Мы сосредоточимся на этой пирамиде производительности. Мы собираемся говорить об инструкциях, которые мы используем, о том, как работает память, о том, как работает ЦП, на самом деле в верхней части этого здесь — это то, о чем идет речь в этом докладе. (Презентация, кстати, будет доступна позже; я отправлю твит, который также будет на веб-сайте QCon.) Есть и другие вещи, которые вы можете сделать для производительности.В частности, если вы смотрите на производительность распределенной системы, сначала исправьте вашу распределенную систему, сначала исправьте архитектуру вашей системы, сначала исправьте алгоритмы. На самом деле верхний уровень — это последние несколько процентов этого конкретного процесса, поэтому доступны другие доклады QCon.

Компьютеры стали очень сложными. Когда мы только говорили о 6502 и BBC, Apple и других подобных системах — Commodore 64 был моим — у вас был единственный процессор, он просто делал одну вещь, и делал это очень хорошо.В наши дни серверные процессоры выпускаются в конфигурациях с несколькими сокетами; и эти несколько сокетов подключены к нескольким микросхемам памяти, и между ними существует полоса пропускания. В этом выступлении я собираюсь сосредоточиться на особенностях Intel и на Linux в том, что касается операционных систем: некоторые идеи будут специфичны для Linux и Intel, но идея заключается в том, что мы применим их к другим операционным системам на других платформах по мере необходимости. хорошо.

У вас могут быть серверы с двумя сокетами; в этом случае у вас есть два сокета, разговаривающие друг с другом.Вы можете получить конфигурации с четырьмя сокетами, а можете получить конфигурации с восемью сокетами. Каждый из этих сокетов подключен к группе микросхем ОЗУ, которые затем являются локальными для этого сокета, а другие микросхемы ОЗУ, хотя и доступны, находятся дальше и, следовательно, немного медленнее. Это известно как неоднородная архитектура памяти (NUMA). Практически любая серьезная серверная система в наши дни имеет неоднородную архитектуру памяти.

Внутри розетки

Что происходит внутри чипа? оказывается, если вы опуститесь еще на один уровень, вы увидите ту же картину.Так выглядят чипы Broadwell с кольцевой шиной для прямой и обратной связи между ядрами. Каждый из этих маленьких квадратов, для тех из вас, кто стоит сзади, представляет собой отдельные ядра с кешем и связанной с ним обработкой.

18-ядерный кристалл выглядит немного странно, потому что у него есть двунаправленный насос между левой и правой сторонами. Если вы переходите от ядра внизу к дальнему, у вас увеличивается трафик, чтобы иметь возможность добраться туда, и, следовательно, более медленная задержка.То же самое верно и для 24-ядерника.

Эти сокеты и эти ядра действительно становятся довольно сложными и важными, хотя мы думаем о машинах как об архитектуре фон Неймана, в которой вы можете просто сослаться на любую память и получить результат обратно; время, необходимое для получения этого обратно, может сильно различаться в зависимости от того, откуда эти данные загружаются.

Текущее поколение процессоров Intel перешло на ячеистую архитектуру. Для таких вещей, как системы Cascade и Skylake, у них есть сетка, позволяющая двигаться вбок.Это дает больше путей, позволяющих добраться из одного места в другое, и теоретически вы можете сделать это за меньшее время. Они бывают 10-, 18- и 28-ядерными, чтобы иметь возможность двигаться вперед. Каждый из этих чипов имеет двунаправленные порты памяти, выходящие с обеих сторон, поэтому вы можете фактически разделить эти вещи на левый и правый кластеры Sub-NUMA и иметь возможность сказать: «Я хочу, чтобы на этой половине все работало и говорило». к этому банку памяти», в то время как у вас есть другой набор процессов, которые работают на этой стороне и взаимодействуют с этим банком памяти.

На самом деле, недавно был выпущен основной «кристалл» Cascade(Lake) 56 — на самом деле это скорее упаковка, чем кристалл, потому что они взяли два из существующих кристаллов и прикрепили их рядом с друг друга, и на самом деле поставить в трубопровод тот же самый кусок кремния, который идет внутрь.

Кэш — король

Все становится сложнее. Если мы углубимся в ядра, то увидим, почему, потому что у нас есть разные уровни кэша внутри каждого из этих процессоров.Они используют знак доллара, потому что это игра со словом «наличные». Для систем Skylake у вас есть файл регистров — который представляет собой количество переменных в полете, если хотите, регистров, которые используются для хранения данных — для систем Cascade и Skylake со 180 целыми числами и 168 значениями с плавающей запятой. Обычно к ним можно получить доступ за один такт, что составляет половину наносекунды, если вы работаете на частоте в два гигагерца, или чуть меньше, если вы работаете немного быстрее.

Те, в свою очередь, делегируют кэш 1-го уровня, который разделен на половину инструкций и данных.Идея его разделения заключается в том, что когда вы обрабатываете большие объемы данных, ваши данные не выталкивают вашу программу за пределы пространства. В частности, большую часть времени вы просто читаете из кеша инструкций, тогда как данные — это улица с двусторонним движением. Это время доступа составляет около 4 циклов.

Это делегирует обратно в кеш уровня 2, который используется ими совместно; обычно 12-15 циклов — что-то в этом роде, в зависимости от архитектуры. Конечно, они имеют разные размеры.В случае систем Skylake и Cascade это около мегабайта кэш-памяти 2-го уровня, специфичного для этого конкретного ядра.

Если вы хотите работать с внешней памятью, у вас также есть кэш-память 3-го уровня, которая используется всеми ядрами на том же кристалле, с которого вы ее загружаете. Обычно на самом кристалле хранится 16 мегабайт или что-то в этом роде, и каждое ядро ​​может получить доступ к памяти оттуда. Конечно, время, необходимое для доступа к ним, на самом деле зависит от того, насколько они локальны для этих данных.

Я также отмечу одну вещь: кэш-память 3-го уровня на чипах Intel является неинклюзивной на уровне L3, но инклюзивной на уровне L2. Это означает, что если у вас есть какие-то данные в L1, они также будут в L2, но на самом деле они не обязательно должны быть в L3. AMD только что выпустила новый чип с очень массивным кэшем L3 внутри: он имеет ряд преимуществ в производительности, и мы, вероятно, увидим, что Intel в будущем также предложит больший кэш L3.

Спасибо за память

Конечно, они делегируют и загружают данные из ОЗУ.В этом случае DRAM, в зависимости от того, насколько далеко она находится, может составлять от 150 до 300 циклов. Говорить о циклах становится немного неточным, потому что это функция как процесса скорости цикла, так и скорости памяти.

На самом деле, если вы используете программу под названием lstopo, она покажет вам, как выглядит ваш компьютер.

Это было снято на моем ноутбуке: это одноядерная система с кучей кеша, разделенного на разные уровни внутри, и на самом деле он сообщает о кеше 4-го уровня.На самом деле это не кеш как таковой, это память, разделяемая между графическим процессором и процессором на моей конкретной машине: это потому, что это ноутбук.

На самом деле, мы наблюдаем активизацию кэша 4-го уровня, и, в частности, энергонезависимую оперативную память подключают к сети в некоторых кэшах 4-го уровня. Будет интересно посмотреть, как это будет развиваться. Ядра, которые показаны внизу, у нас есть четырехъядерный процессор с доступной гиперпоточностью.

Резервный буфер перевода

Но есть нечто большее, чем просто кеш памяти: когда люди говорят о кешах памяти, они обычно думают об этой комбинации Уровня 1, Уровня 2, Уровня 3, но внутри есть куча других.Один из них, который очень важен, называется буфером перевода (Translation Lookaside Buffer) или TLB. TLB используется для сопоставления виртуальных адресов с физическими адресами в системе. Причина, по которой это важно, заключается в том, что каждый раз, когда вы меняете процесс или, возможно, каждый раз, когда вы входите в ядро ​​и снова выходите из него, вам нужно обновлять эти таблицы.

Эти таблицы будут иметь список, который, по сути, говорит: «Если вы видите адрес, начинающийся с 8000, сопоставьте его с этой конкретной микросхемой ОЗУ, которая будет находиться где-то в системе.Если вы видите что-то, начинающееся с ffff, сопоставьте это где-нибудь еще». Это происходит для каждого адреса, который вы просматриваете, и поэтому он должен быть достаточно быстрым. В частности, если у вас есть что-то в этом кеше, отлично, вы можете получить доступ памяти быстро, если его нет в этом кеше, это займет у вас некоторое время.

Таблицы страниц

Это потому, что он должен делать так называемый обход таблицы страниц. У каждого процесса в вашей операционной системе есть таблица страниц, и эта таблица страниц хранится в регистре CR3, но каждый раз, когда вы переключаете процесс, она переключается на что-то другое.По сути, это карта, на которой ваш процесс работает на этой конкретной машине. Это дерево, поэтому я продемонстрировал его здесь как двухуровневую иерархию, чтобы иметь возможность перемещаться между ними, но на самом деле на современных процессорах она имеет четыре уровня, а на Ice Lake, следующем поколении Intel, это будет иметь пятиуровневую глубокую структуру страницы.

В частности, этот уровень структуры страниц может дать вам определенный объем памяти. На данный момент четырехуровневые таблицы страниц занимают 47 бит, 48 бит пространства для виртуальных адресов; пять уровней доведут это до 57 бит, что означает, что вы можете адресовать гораздо больше виртуальной памяти, чем нам нужно.Шестидесяти четырех терабайт должно хватить любому.

(Огромный) Страниц

Эти страницы памяти разделены на 4К. Теперь этот размер 4 КБ имел смысл еще в 386 дней, когда появилась виртуальная память, но он не очень хорош для систем, которые занимают сотни мегабайт или сотни гигабайт пространства. Вы можете изменить уровень детализации этого сопоставления от размера 4k до огромной страницы. Огромная страница в основном означает что-то, что не имеет размера 4k.

Большинство систем Intel для этого имеют два разных размера; у них будет двухмегабайтная и одногигабайтная поддержка.Он находится под контролем операционной системы в отношении того, какой из них он использует, и каждый ЦП будет иметь флаги, чтобы указать, какой из них он является. Разные архитектуры имеют одинаковое представление о больших страницах, но они будут работать немного по-разному или иметь немного разные размеры по умолчанию.

Цель использования больших страниц состоит в том, чтобы TLB не нужно было хранить столько указателей. Если у вас есть только одна гигантская страница для вашего процесса, то все ваши поиски проходят через эту одну запись в таблице, и вы можете загрузить ее довольно быстро.С этой точки зрения это хорошо; но у него есть некоторые недостатки. Это может быть немного сложнее в настройке и использовании: и если вы используете Hugetblfs, вам необходимо настроить его.

Hugetblfs — это немного больно. Это было первое, что появилось в Linux для поддержки больших страниц. Что вам нужно сделать, так это иметь возможность заранее указать, сколько больших страниц вы хотите и каков будет размер, а затем вы должны были быть в определенной группе разрешений, и тогда ваше приложение будет решать пользоваться этими вещами.В общем, люди попробовали, людям не понравилось, перестали пользоваться.

Прозрачные огромные страницы

Вместо этого было что-то под названием «Огромные прозрачные страницы». Теперь это было немного более успешным, но не без проблем. В Transparent Huge Pages говорится: когда вы запрашиваете страницу, вместо того, чтобы возвращать страницу размером 4k по умолчанию, верните им страницу размером в два мегабайта или один гигабайт, в зависимости от того, как она настроена. Тем не менее, большинство приложений были написаны так, чтобы предположить, что когда вы выделяете страницу, вы просто получаете обратно размер 4 КБ.Они будут записывать только 4 КБ данных, и в итоге вы выделили два мегабайта непрерывного физического пространства, и вы используете только небольшую его часть.

Transparent Huge Pages, когда он впервые появился, и простое предоставление всем больших страниц по умолчанию на самом деле не сработало. Есть несколько вариантов конфигурации, которые вы можете сделать. Один из них — в файле hugepages/enabled указать что-то, что будет работать, если вы используете madvise . Madvise — это вызов, на который вы можете сказать: «Да, я хотел бы использовать Huge Pages, пожалуйста», и вы можете указать это в своем коде.Если вы этого не сделаете, вы получите маленькую страницу, если вы это сделаете, вы получите большую страницу.

Одна из проблем, возникающих в высокопроизводительных системах, заключалась в том, что вы запрашивали большую страницу, а операционная система говорила: «У меня еще нет большой страницы. затем соберите целую кучу маленьких страниц, и это займет некоторое время, что не очень хорошо, если у вас система с низкой задержкой.

Относительно новый параметр, который был добавлен к этому (в последних нескольких выпусках Linux), — это параметр отложить .Что сделает опция отсрочки, так это скажет: «Хорошо, я собираюсь кое-что спросить. Я бы предпочел большую страницу, но если у вас ее нет, тогда все в порядке, я просто возьму кучу маленьких страниц». и вы можете исправить это снова после этого». В целом это уменьшило проблему блокировки, которую вы могли бы увидеть. Вы по-прежнему будете видеть множество сообщений в блогах и ответы Stack Overflow, в которых говорится: «Не используйте огромные страницы». Попробуйте это с madvise и с defer и посмотрите, что получится.

Кэш-линии

В то время как операционная система имеет дело с памятью в единицах размера страницы, будь то 4 КБ или два мегабайта, фактический процессор имеет дело с памятью в размере строки кэша. Размер строки кэша на данный момент составляет около 64 байт. Теперь я говорю о 64 байтах. Для процессоров Intel, которые вы используете на своих ноутбуках, это ровно 64 байта, но в будущем вполне может быть и 128 байт. Не думайте, что это будет 64 байта.

В частности, если вы работаете с мобильными устройствами или архитектурами ARM, у ARM есть нечто, называемое большим.МАЛЕНЬКИЙ, и вы получите процессоры с кэш-строками разного размера внутри них. Так что имейте в виду, что существуют разные. Для серверов Intel в основном вы смотрите на 64 байта. К тому времени, когда вы будете смотреть это через два или три года на InfoQ, это, вероятно, будет 128 байт. Сначала вы услышали это здесь.

Когда вы загружаете память из процесса и выполняете итерацию по ней, произойдет то, что ЦП заметит, что вы обращаетесь к памяти, а затем начнет получать данные. Когда мы проходим через память, подсистема памяти процессора автоматически начать выборку памяти для вас.

Если вы можете упорядочить свои процессы для итерации по памяти в линейной форме, отлично, вы сможете пройти через них. Случайное подпрыгивание, как при обходе кучи объектов, не очень хорошо для системы памяти.

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

Есть что-то, что вы можете использовать в компиляторах __builtin_prefetch, которое в конце концов оказывается под прикрытием инструкцией предварительной выборки, которая может запросить, чтобы вы скоро просмотрели часть памяти, поэтому, пожалуйста, сделайте ее доступной.Используйте это, только если у вас есть данные, чтобы показать, что это имеет смысл. В основном вы будете принимать неправильные решения по этому поводу не потому, что вы не можете принять правильные решения, а потому, что вы либо запросите это слишком рано, и это вытеснит то, что вы использовали, либо вы запросите это. слишком поздно, и вы уже используете данные к тому времени, когда они вам понадобятся. Это то, что вы можете использовать для настройки, но не то, к чему я бы рекомендовал прыгать в качестве первого пункта.
Попытка организовать структуру вашей памяти так, чтобы вы могли обрабатывать ее линейно, поможет вам улучшить производительность на этом уровне.

Ложный обмен

Вы также можете иметь что-то в строках кеша, называемое ложным общим доступом. Ложное совместное использование — это когда у вас есть что-то вроде размера строки кэша, и у вас есть два потока, которые могут читать и писать внутри него. Хотя они записывают в разные места, в разные переменные, говоря компьютерным языком, если они читают и записывают в одну и ту же строку кэша, между двумя ядрами будет небольшое перетягивание каната.

Если у вас есть эти два ядра по разные стороны 56-ядерного корпуса или в другом сокете, то здесь вы получите конкуренцию.Вы либо получите потерю данных, если не использовали примитивы синхронизации [NB не относится к ложному совместному использованию, просто в целом], либо вы получите плохую производительность, поскольку они борются за исключительное право собственности на это конкретное строка кэша.

Во избежание этого, если вы выполняете обработку с несколькими потоками и собираетесь считывать и записывать много данных, разделите их парой строк кэша. Я говорю пару строк кеша, потому что буфер заполнения загрузки, когда он загружает что-то, загружает пару строк кеша за раз.Хотя вы не читаете и не пишете этот раздел, вы можете обнаружить, что все еще наступаете друг другу на пятки. Компилятор Oracle HotSpot имеет sun.misc.Contented [или jdk.internal.vm.annotation.Contented], который дополняется 128 байтами пробела, когда вы пытаетесь что-то прочитать и записать, чтобы избежать этой конкретной проблемы. Конечно, это число будет меняться по мере изменения размера строки кэша.

Стратегии производительности памяти

Чтобы максимально эффективно использовать подсистему памяти, постарайтесь спроектировать размещение данных и структуры данных так, чтобы они помещались в соответствующем объеме пространства.Другими словами, если ваш горячий набор данных, который вы много обрабатываете и используете, может поместиться в кэше L1, отлично, вы сможете обрабатывать его очень быстро. Или вы можете купить фишку Ice Lake, которая стоит 48k уровня 1 вместо 32k. Если это не так, посмотрите, может ли он соответствовать Уровню 2, и посмотрите, может ли он соответствовать Уровню 3. Такие вещи видны из JavaScript, Java, Python или чего-то еще, с чем вы имеете дело, и вы можете увидеть если вы измеряете производительность при округлении размеров, вы получаете эти ступенчатые изменения при переполнении из одного уровня кеша в следующий.

Подумайте также о том, как вы структурируете свои данные. Если у вас есть данные в наборе массивов, может быть проще выполнить поворот и думать о них как о наборе массивов, в каждом из которых есть одно поле, потому что, скажем, вы обрабатываете изображения: вам может не понадобиться обрабатывать альфа-канал. значение, но вы можете захотеть обработать красный, зеленый и синий. Если у вас есть массив красных, массив синих и массив зеленых, вы сможете получить лучшую производительность, чем если бы вы перебирали красный, зеленый, синий, красный, зеленый, синий в Память.

Также рассмотрите возможность использования локальных структур данных потока или ядра. Если вы выполняете какую-либо операцию уменьшения карты над целой группой данных, рассматривайте ее как распределенную систему. В задании по уменьшению карты вы запускаете его, получаете множество результатов, а затем объединяете их обратно на последнем шаге. Относитесь к этому так же и с вашими ядрами. Заставьте одно ядро ​​рассчитать и сделать что-то, другое ядро ​​рассчитать и сделать что-то еще, а затем вывести эти результаты, а затем сложить их, а не пытаться бороться за какую-то общую переменную в памяти.

Рассмотрите возможность сжатия данных. Это произошло в JVM недавно, когда мы сжимали строки. Вместо того, чтобы каждый символ занимал два байта пространства, он был сжат до размера одного байта. Это был выигрыш в производительности, потому что, хотя для расширения и сжатия по запросу по мере загрузки требуется немного дополнительных инструкций, на самом деле тот факт, что вы перемещаете меньше данных как в кеши, так и из них, а также для сборщика мусора. процесс означал, что это была победа в производительности.Вы можете использовать другие стратегии сжатия. HDRHistogram — это хороший способ сжатия большого количества данных в логарифмической форме. В зависимости от вашего приложения вы также сможете что-то придумать.

Закрепление памяти и потоков

Вы также можете закрепить, где живут память и потоки. Если вы имеете дело с масштабируемой системой и вам нужно решить масштабируемую проблему, попробуйте закрепить потоки в определенных местах, чтобы иметь возможность их обрабатывать. Если вы имеете дело с чем-то вроде эталонного теста Netty, где вы потребляете события через сетевой сокет, закрепите свой рабочий поток так, чтобы один рабочий поток находился на этом ядре, другой рабочий — на этом ядре, еще один рабочий — на другом ядре. .Таким образом, вы получите наилучшую производительность, потому что вы никогда не будете обрабатывать их или обмениваться местами.

Если вы делаете это, вам может потребоваться сообщить ядру Linux, чтобы оно держалось подальше от подраздела этих ядер, используя isolcpus , который является параметром времени загрузки, и вы можете сказать, что хотите, чтобы ядро ​​​​Linux выполняло свою работу только на подмножество ваших ядер. Вы также можете использовать набор задач, чтобы сказать, когда вы запускаете программу, такую ​​​​как демон ведения журнала или что-то еще, что вы хотите создать набор ЦП, который будет использоваться вашим приложением, а другие приложения будут запускаться в другом месте.Эти вещи вы можете указать как системный администратор Linux, чтобы иметь возможность это делать.

Также есть numactl и libnuma, которые вы можете использовать, чтобы иметь возможность программно контролировать, где вы собираетесь выделять большие куски памяти. Опять же, вы можете использовать (суб)кластеры NUMA на процессорах, чтобы иметь возможность решить, куда это пойдет.

Внутри ядра

Мы много говорили о памяти, а как насчет мозгов операции, что насчет процессора? ЦП или ядро ​​​​разделено на две части: интерфейс и сервер.Это не похоже на фронтенд-разработку, там не работает JavaScript. Работа внешнего интерфейса состоит в том, чтобы взять кучу инструкций в формате x86, декодировать их, понять, что они из себя представляют, а затем выдать микрооперации или μops, потому что U легче набрать на клавиатуре, чем μ для обработки бэкендом.

Внешний интерфейс

Мы получаем кучу байтов, поступающих из системы памяти, которые поступают в предварительный декодер, который говорит: «Здесь заканчивается эта инструкция. опс.

Здесь мы рассмотрим только это приращение, потому что, когда вы увеличиваете что-то в памяти, на самом деле это означает, что вы будете загружать из памяти, делать сложение, а затем вы будете писать это обратно в память. Это приращение соответствует трем микрооперациям.

Вообще говоря, между микрооперациями в бэкенде будет связь типа «один к одному». Если вы используете сложные режимы адресации, где сложный означает, что вы добавляете смещение или умножаете какое-то значение, тогда могут быть также сгенерированы несколько других микроопераций.В конечном счете, смысл этого состоит в том, чтобы выдать кучу микроопераций для бэкенда.

На данный момент мы все работаем по порядку. Инструкции приходят по порядку, мкоператы выходят в том порядке, в котором мы хотим, чтобы они также выполнялись. Есть несколько вещей, которые идут на интерфейсе. Одним из них является кэш μop. Когда вы выполняете декодирование инструкций Intel, которые довольно сложны, в набор этих микроопераций, которые являются внутренними, но немного проще, их можно кэшировать, поэтому в следующий раз, когда вы их увидите, он выдаст то же самое.

Важно отметить, что у нас есть декодер циклического потока, который использует циклы, поэтому, когда вы выполняете очень плотный цикл, он просто обслуживает декодированные микрооперации, а не проходит этот процесс синтаксического анализа. Это срежет несколько элементов в конвейере. (Большинство конвейеров процессоров Intel имеют глубину от 14 до 19, в зависимости от того, что они делают.)

Предсказатели переходов

Одной из вещей, которая влияет на него больше всего на свете, является предсказатель ветвлений.

Работа предсказателя ветвления состоит в том, чтобы выяснить, куда мы идем дальше.Это как спутниковая навигация для процессора. Это правильно большую часть времени. Вероятно, у него лучший рейтинг, чем у меня, когда я пытаюсь сделать навигацию для вождения. Он выясняет, куда вы пытаетесь перейти, предполагает, взята ли ветвь или нет, а затем начинает выполнять инструкции, так что к тому времени, когда конвейер пройдет, все инструкции будут готовы и ожидают отправки.

Иногда это не удается. В этом случае синтаксический анализ и декодирование отбрасываются, он сбрасывается туда, где он должен быть, а затем у вас возникает то, что называется задержкой конвейера или пузырем, где он ждет, пока инструкции пройдут, а затем снова наверстывает упущенное.Если вы сможете уменьшить количество неправильных спекуляций в ветвях, вы повысите производительность своего приложения.

Предсказание переходов динамически адаптируется к тому, что на самом деле делает ваш код. Это также то, что видно с высокого уровня. Если у вас есть программа на Java или программа на JavaScript, которая перебирает кучу массивов и, возможно, суммирует, скажем, положительные числа в один счетчик и отрицательные числа в другой счетчик, предсказатель ветвления выясняет, какой из элементов перейти вниз, запутается на случайных данных.Вы получите приемлемую производительность, но предсказатель ветвления не сможет вам помочь, потому что он будет правильным примерно в 50% случаев.

Если вы имеете дело с отсортированным набором данных, другими словами, вы видите сначала все отрицательные числа, а затем все положительные числа, предсказатель ветвления будет на высоте, и он даст вам свое лучшая производительность, потому что он будет предполагать, что после того, как он увидит первые несколько отрицательных чисел, все они будут отрицательными, пока они не изменятся, когда у вас будет немного медленная производительность, а затем положительные числа продолжатся оттуда.

Предиктор ветвления, который решает, спуститесь ли вы куда-нибудь, — это только половина дела. Также есть предсказатель цели ветвления. Этот предиктор цели говорит, куда вы собираетесь пойти. Теперь, во многих случаях, предсказатель ветвления [цели] будет знать точно, потому что вы собираетесь перейти к определенному месту памяти. Вы переходите к функции выхода из системы или снова переходите к этой конкретной процедуре в начале цикла.

Однако иногда вы переходите к значению регистра, а этот регистр может быть еще не вычислен.Он возьмет на себя удар и подумает, что на самом деле он пытается загрузить это значение данных, но иногда это может быть неправильно, и вам нужно перемотать назад и сделать что-то снова.

Вы увидите, что предсказатель цели ветвления будет сильно путаться, когда вы перебираете объектно-ориентированный код, будь то C++, будь то ваша собственная объектная ориентация, будь то JVM или что-то в этом роде. Это потому, что для того, чтобы выяснить, куда идти, он должен иметь возможность загрузить, что такое класс, посмотреть в слове класса, а затем выяснить из слова класса, где находится vTable, а затем перейти к реализации в vTable. .Эти несколько прыжков запутают предсказатель цели перехода.

Одна из немногих вещей, которые вы можете сделать, чтобы ускорить это, заключается в том, что у вас может быть проверка, говорящая: «Если это похоже на класс X, перейдите к реализации класса X. В противном случае вернитесь к динамической диспетчеризации». Это то, что вы можете реализовать очень дешево и очень быстро. На самом деле, JIT и JVM делают это, используя мономорфную и биморфную диспетчеризацию для общих случаев, а некоторые из не-Oracle делают больше, чем просто два.

Это работает и в C++. Если у вас есть вызов динамической диспетчеризации, например, если вы реализуете VFS… Недавно я видел что-то, в котором говорилось, что операция Linux VFS была ускорена в три раза или что-то в этом роде просто потому, что они сказали: «Если вы используете файловую систему X2, тогда вместо этого делегируйте это реализации X2». Некоторые из недавних мер, которые были добавлены в ядро ​​Linux, чтобы избежать таких вещей, как Spectre, Meltdown и т. д., со временем фактически снизили производительность Linux.Поставив свою собственную мономорфную отправку, вы можете снова получить часть этой скорости.

Здесь, я думаю, Мартин несколько раз подчеркивал это в прошлом: встраивание — это главная оптимизация, потому что когда вы делаете встраивание, вы внезапно знаете гораздо больше о том, куда вы идете, но вы также часто теряете косвенный вызов. . На самом деле, потеря этих вызовов функций является хорошим способом оптимизации производительности, потому что тогда вам не нужно беспокоиться о том, что предсказатель ветвления или целевой предсказатель на ЦП не смогут что-то делать.

Серверная часть

Мы выяснили, куда мы идем, у нас есть целая куча мкопераций, у нас есть хороший их поток. Что будет дальше? Затем он переходит к серверной части, и поэтому работа серверной части состоит в том, чтобы взять все эти микрооперации, выполнить вычисления, а затем выплюнуть в память любые побочные эффекты. В этом конкретном случае мы загружаемся из местоположения и памяти, увеличиваем это значение, а затем снова записываем это значение.

Теперь, на данный момент, нам не нужно беспокоиться о таких вещах, как eax, esi, rsi и т. д., потому что мы все изменили их на временные регистры.У x86 ISA эти регистры есть внутри. В ядре таких вещей гораздо больше. В нем говорится: «Для этой конкретной инструкции мы вставим временную переменную, которая была здесь, eax, скажем, в R99». Вы собираетесь выбрать один из тех, которые свободны внутри этого.

По мере развития процессоров, по мере того, как этот регистровый файл становится больше, мы можем обрабатывать все больше и больше данных в процессе передачи. Это важно, потому что внутри бэкенда, как только мы сделали распределение, мы теперь начинаем гонки. Все эти микрооперации конкурируют за доступность внутреннего процессора на бэкэнде, чтобы фактически выполнять свою работу.Как только эти зависимости данных появятся, они будут запланированы, выполнены, и результаты будут отправлены.

Процессоры Intel

и большинство других серверных процессоров в наши дни вышли из строя, потому что в этот момент любая из этих микроопераций может выполняться одновременно. Важно отметить, что с точки зрения производительности этот бэкэнд способен выполнять несколько микроопераций одновременно. Фронтенд может отправлять на сервер четыре микрооперация за цикл для систем Intel и Cascade Lake. Для систем Ice Lake он может выдавать пять микроопераций за цикл.Если они не конкурируют за слоты, на которых им нужно работать, то вы также можете иметь несколько таких микроопераций, работающих параллельно.

В этом конкретном случае наш внутренний «процессор» имеет несколько портов, и эти порты являются исполнительными устройствами. Все они умеют заниматься арифметикой, все умеют делать логические операции. Некоторые из них будут способны делиться, некоторые — размножаться. Существуют разные реализации для целочисленной стороны и стороны с плавающей запятой.

Все они смогут принимать внутри себя 256-битные значения. Порт 5 сможет обрабатывать 512 бит самостоятельно, и вы можете комбинировать порты 0 и 1, чтобы иметь 512-битную операцию. Если вы имеете дело с 512 битами, у вас, по сути, есть два пути: либо порт 5, либо порт 0 и 1. Вы не можете решать, что происходит, это процессор делает это за вас, но вы можете, по крайней мере, выполнить эти две вещи параллельно. Есть куча других, которые вам также нужно использовать для генерации адресов, загрузки, хранения и так далее.

В этом конкретном случае они распределяются по своим соответствующим портам, мы выясняем, какое значение поступает от загрузки, мы выясняем, что регистр теперь имеет значение 2A. Теперь приращение готово к выполнению, потому что его зависимость была удовлетворена, и поэтому выполняется обновление, а затем, как только оно будет выполнено, запись будет завершена в конце.

В этот момент, когда он выходит за дверь, мы снова в порядке. Произошло много всего, мы, возможно, сделали много ошибок, мы, возможно, измотали наш кеш, и мы можем видеть это внешне через Spectre и Meltdown, но между микрооперациями, входящими в серверную часть, и исходящими из него микрооперациями или операциями записи. выходя на него, мы были не в порядке все это время.

перф

Откуда мы знаем, что происходит внутри, чтобы что-то изменить? Я уверен, что вы все знакомы с perf. Perf — это общий инструмент производительности Linux, который может опрашивать счетчики, хранящиеся внутри бэкэнда и внешнего интерфейса самого ядра. Существуют такие инструменты, как запись, которые позволят вам отслеживать выполнение программы; аннотировать и сообщать вам, что на самом деле означают результаты из двоичного файла; и статистика для возможности опрашивать счетчики производительности сами по себе.

Запись производительности, когда вы ее запустите, возьмет приложение, а затем создаст файл данных о производительности для всех результатов. Затем вы можете перенести этот файл на другой компьютер для анализа, если хотите, или вы можете выполнить обработку данных на хосте в зависимости от того, что вы делаете.

Когда вы делаете записи в perf, он фиксирует трассировку стека в каждой точке, и трассировка стека затем будет там, где вы находитесь, чтобы вы могли объединить ее и снова получить результаты, как профилировщики, к которым вы привыкли в высокий конец сделает.

Полозья

Однако на этом уровне профилировщик подвержен тому, что называется заносом. Вы говорите: «Я хочу начать запись здесь», но на самом деле процесс все еще работает, и к тому времени, когда он замечает, что вы хотите внести изменения, он фактически должен сделать резервную копию, а затем сказать: «Мы закончили». здесь и сейчас, так что я думаю, это то, что вы имели в виду.

Есть несколько флагов точности, ‘:p’, которые вы можете добавить к нему для более точных значений, и они будут добавлять все больше и больше накладных расходов, но будут приближать вас все больше и больше к точному значению того, что произошло.Вообще говоря, если вы пытаетесь определить узкие места в своей системе, вы сможете получить приблизительный обзор, во-первых, запустив perf без него, а затем, когда вы оттачиваете и сужаете области проблем. , вы можете затем начать увеличивать точность, чтобы получить ее точные значения.

Обратные следы

Когда у вас есть основные ветки, программа производительности попытается выяснить, что такое обратная трассировка, пройдя назад по стеку. Если у вас есть код, который имеет дело с указателем ветвления внутри, он сможет следовать этому обратно из стека.Довольно много программ скомпилировано без поддержки указателя ветвления, потому что в 32-битные дни у нас было не так много регистров, поэтому было полезно иметь возможность использовать указатель фрейма для чего-то другого.

В наши дни, вероятно, меньше причин не иметь его там, но если вы имеете дело с сервером с отладочными символами, он может использовать формат dwarf, чтобы иметь возможность выяснить, как снова пройти по стеку. Если вы когда-нибудь сталкивались с неполной трассировкой стека, это, вероятно, потому, что у вас нет там указателей на буфер и нет символов отладки, чтобы иметь возможность отследить это.Однако для выполнения кода команда perf поддерживает то, что называется графом вызовов. Что сделает опция call-graph, так это скажет, какую разновидность обратной трассировки вы хотите использовать.

LBR — это последняя запись ветки Intel. Что происходит, когда процессор Intel прыгает, он записывает, где он был. Если вы делаете снимок этого каждые несколько стеков вызовов, вы можете создать полную картину того, куда вы ушли, даже если у вас нет символов отладки или указателей фреймов внутри.Это даст вам точные значения. В еще более новых процессорах Intel есть функция Intel Processor Trace. Intel Processor Trace делает то же самое, но с гораздо меньшими затратами. Внизу есть пара еженедельных статей по Linux, которые вы можете найти, когда просмотрите слайды позже.

Статистика процессора

Помимо показателей производительности, есть еще и статистика производительности. Perf stat даст вам представление о том, сколько работы на самом деле выполняет ваша программа, и будет считывать счетчики с процессора, чтобы сообщить вам об этом.Он расскажет вам, сколько есть инструкций, сколько веток вы взяли. В этом случае промахи ветвления составляют около 5% промахов ветвления, поэтому это означает, что предсказатель ветвления работает примерно в 95% случаев, что хорошо. Это те вещи, которые вы могли бы проверить.

Одна вещь, на которую следует обратить внимание, это количество инструкций за цикл или IPC. IPC говорит о том, насколько эффективно вы выполняете работу. У вас может быть программа, которая работает на 100% ЦП и имеет IPC 0,5, которая будет работать очень медленно, и вы можете иметь ту же программу, работающую на 100% ЦП, и получить IPC 2.5 и работать в пять раз быстрее. 100% умножить на пять — это 100%. Это отличная скорость, если вы можете ее найти.

В зависимости от того, какой процессор вы используете, IPC будет находиться в области ниже единицы, что означает, что у нас есть потенциально другие проблемы, которые нам необходимо исследовать, или что-то ближе к четырем, что является максимальным номером типа, который вы увидите из этих систем. Я думаю, что IceLake может начать приближаться к диапазону из пяти IPC, но в этом конкретном случае лучше использовать большие числа; и меньше одного означает, что вам, вероятно, нужно разобраться, что происходит.Эти вещи считываются из так называемых счетчиков производительности.

Счетчики производительности

Счетчики производительности — это специфичные для модели регистры, которые есть у каждого ЦП, и по мере прохождения и выполнения инструкций он будет увеличивать этот счетчик. Вы получаете бесплатно: количество филиалов; отсутствует ветвь; количество выполненных инструкций и так далее. Есть и программные. Если вы хотите подсчитать, сколько промахов кэша TLB вы делаете, сколько просмотров страниц вы делаете, сколько выполнений вы выполняете на пятом порту на самом процессоре, вы можете настроить эти счетчики так, чтобы они могли давать вы отвечаете на эти ценности.

У них есть имена — perf -list расскажет вам, что они собой представляют. Если вы не знаете, что такое имя, но вы знаете, что такое код, вы можете вставить что-то случайное, и это тоже вам что-то скажет. Конечно, я не знаю, что это такое. Я откуда-то взял, но не могу вспомнить, что это такое. Это потому, что обычно, когда вы проводите анализ, вам нужно следовать процессу.

Метод анализа микроархитектуры сверху вниз

Существует метод анализа микроархитектуры сверху вниз или TMAM, который был создан Ахмедом Ясином.В нем говорится: «Давайте возьмем производительность нашего приложения и выясним, где находятся узкие места». На большой диаграмме, которая была у меня раньше с интерфейсом и сервером, это разделение, которое у нас есть. Мы не можем обслуживать количество микроопераций на интерфейсе, блокируем ли мы серверную часть для выполнения какой-либо обработки? Мы убираем их? Это не значит уехать жить куда-то в деревню, это значит на самом деле поехать работать… Или это плохая спекуляция, потому что мы просто понятия не имеем, куда едем?

Каждый из них имеет различные счетчики производительности, которые вы можете включить, чтобы иметь возможность сказать, где вы находитесь.Теперь, опять же, это здорово, если у вас есть это, и это упоминается в руководстве по оптимизации программного обеспечения Intel. На самом деле это сводится к следующему: мы когда-нибудь выделяли μop? Если мы выделили микрооперацию, она удаляется? Если он уйдет на пенсию, то отлично, это будет полезная работа. Если нет, он падет на путь плохих спекуляций. Если μop не выделен, это потому, что мы остановились на интерфейсе или на сервере?

Все это звучит очень сложно, но пока вы можете писать сверху вниз, отлично, потому что perf сделает это за вас.Если вы запустите perf -topdown, он запустится для всей системы и даст вам обзор, в каких сегментах работает ваша система. В этом случае мы не измеряем время сна, мы просто используем его как точку ожидания для возможность указать, что происходит. В данном конкретном случае у меня есть шестиядерная система, работающая на одном сокете. (Вероятно, это три ядра и три гиперпотока.) Уровень отказа составляет где-то между 15% и 35%.

Другими словами, у нас есть от трех до четырех раз, когда мы могли бы оптимизировать это, чтобы работать быстрее.Если этот уход на пенсию означает, что работа сделана на 100%, то пора пивка. В большинстве случаев вы обнаружите, что это меньшее число, и вы можете оптимизировать это число, выяснив, почему ваша программа работает медленнее, а затем предприняв шаги, чтобы иметь возможность оптимизировать его. В данном конкретном случае красным цветом выделено то, что мы можем быть внешним или внутренним интерфейсом, связанным с целой кучей процессов.

Чтобы узнать что-то более полезное (это даст вам снимок вашей системы), вы действительно хотите узнать, что делает ваш процесс.

Топлев

Энди Клин написал нечто под названием Топлев. Инструмент Toplev проведет вас через весь процесс и подскажет, с чего начать поиск. Когда вы впервые запускаете его, он загружает некоторые файлы конфигурации с веб-сайта Intel, download.01.org для процесса, который вы запускаете, чтобы вы знали, какие счетчики производительности ему доступны.

Если вы развертываете это на сервере с воздушным зазором, вы можете заранее загрузить эти файлы конфигурации, а затем развернуть их вместе с ним.Есть документация, которая показывает вам, как это сделать.

По сути, это очень причудливый интерфейс для перфоманса. Это «cpu/event=0x3c,umask=0x0/». Я не знаю, что это такое, но Топлев знает, и тогда он сможет сгенерировать команду perf. Есть опция, которую вы можете использовать, чтобы даже сказать, какую команду производительности вы бы выполнили, чтобы затем скопировать и вставить ее и запустить в другом месте. Это сделает работу за вас.

Другая хорошая вещь, которую сделает Toplev, это если у вас есть повторяющаяся рабочая нагрузка, вы многократно запускаете определенный процесс, тогда вы можете использовать это в режиме без мультиплексирования.Мы уже говорили о мультиплексировании: если у вас есть два символа и у вас нет счетчиков для них, он запишет один, а затем другой, затем запишет один, а затем другой, а затем, по сути, просто удвоить счет после этого. В режиме без мультиплексирования выполняется вся программа, считая этот счетчик, затем она снова запускается, считая другой счетчик. Это даст вам гораздо более точный обзор того, что происходит в вашей системе, если предположить, что это повторяется.

Затем вы можете запустить его с параметром -l1. Он покажет вам то же самое, что и perf сверху вниз, но только для этого конкретного процесса. Здесь мы создаем 16-мегабайтный файл случайных данных, а внутри него мы смотрим на однопоточный уровень без мультиплексирования один для кодирования base64 просто потому, что base64 — это то, что почти у всех есть, и вы можете поиграть с ним. этот пример дома потом.

Когда мы запустим его, он выполнит некоторые вычисления и, в частности, сообщит нам следующее: «Кстати, вы знали, что эта программа привязана к серверной части?» Другими словами, мы получаем материал в память, мы выполняем мкоперации, предсказатель ветвления не терпит неудачу, мы передаем его на серверную часть, и тогда серверная часть не обрабатывает ее так быстро. как мы хотели бы.

Если вы запустите его через -l2, он скажет, что он привязан к ядру, а если вы запустите его снова, он скажет, что это связано с использованием портов. Это означает, что мы генерируем целую кучу инструкций, они выполняются на одном из портов на той диаграмме, которую я показал вам несколько слайдов назад, но поскольку для этого нет других доступных портов, это все быть узким местом на этом порту. Например, если бы мы выполняли несколько операций деления, мы ожидали бы, что все будет работать только на первом порту, потому что только он выполняет целочисленное деление.Различные процессоры дадут вам разную производительность, прежде всего потому, что Intel продолжает добавлять исполнительные блоки.

Cascade Lake и Skylake почти одно и то же. (Одним из них является лишь слегка оптимизированный способ укладки кремния.) Затем Ice Lake добавляет туда новые порты и новые функции. Вы ожидаете, что эта программа будет работать быстрее на Ice Lake просто потому, что они изменили внутреннюю часть процессора.

Есть, конечно, разные варианты, из которых можно выйти.Вы должны углубиться, чтобы узнать, где происходит процесс. Если он привязан к внешнему интерфейсу, вам нужно заглянуть в память и иметь возможность вытащить что-то.

Если это связано с серверной частью, может быть, вы можете что-то сделать с вашим алгоритмом. На самом деле я не предлагаю прыгать и исправлять base64 вживую на сцене, но я предполагаю, что он выполняет кучу умножений, и эти умножения выполняются на определенном порту. Если бы мы нашли другой способ сделать это, возможно, было бы немного быстрее, если бы мы сделали это таким образом.Одним из таких способов является векторизация, о которой я упомяну чуть позже.

Формат кода

Еще одна вещь, которая может повлиять на производительность вашей программы, — это сама структура кода. Если у вас есть программа и у вас есть некоторая логика «если», например: если произошла ошибка, если произошло исключение NullPointerException или что-то еще, есть два разных способа размещения этого кода в памяти. У вас может быть либо тест на ошибку, который затем переходит к хорошему случаю, либо просто переходите к случаю ошибки, в котором вы переходите к чему-то другому.Или вы можете сделать это наоборот, когда нормальный случай следует за ним, а плохой случай прыгает вниз.

Что касается предсказателя ветвления, пока вы не ошибетесь, он всегда будет угадывать правильную ветвь, тогда он всегда будет делать правильные вещи. Однако, если у вас есть строки кеша, задействованные в этом, и вы загрузили инструкции в одну конкретную строку кеша или несколько строк кеша, будет хорошо, если мы уже загрузили код, который мы хотим запустить.Если бы вы могли разместить свой код ошибки так, чтобы он жил где-то еще, а не выполнялся внутри, вы бы повысили производительность только потому, что подсистеме памяти будет выполняться меньше работы.

Один из способов сделать это — использовать функцию __builtin_expect, которая используется в ядре Linux. У них есть макросы, которые могут и вряд ли смогут использовать __builtin_expect. Если вы скажете __builtin_expect(error,1), другими словами, мы ожидаем, что это случай по умолчанию, код будет выложен таким образом.В старые времена это использовалось для выдачи инструкции, чтобы сообщить предсказателю ветвления, в каком направлении идти. (Это не использовалось, так как мои волосы не были седыми.) Если вы хотите указать хороший случай, вы можете указать __builtin_expect no, и он придет и выложит его вместо этого.

Если вы используете оптимизацию на основе профиля, это то, чему профиль научится за вас. Если у вас есть конвейер CI, который выполняет тесты производительности, собирает информацию о профилях, а затем применяет ее, это уже выполненная работа — в данном конкретном случае она выполняет определенные действия.Если нет, это может быть что-то, что позволит вашему хорошему коду пути или коду горячего пути работать немного быстрее.

Выравнивание контура

Еще одна вещь, о которой я упоминал чуть раньше, это то, что называется декодером циклического потока. На самом деле, около часа назад я увидел твит, в котором кто-то говорил: «Почему это работает быстрее при определенном выравнивании?» и на Reddit есть ветка, на которую они указали. У Intel есть нечто, называемое детектором циклического потока, поэтому, когда вы дойдете до конца цикла, он вернется к началу, а затем пойдет по следующему циклу.Это в основном то, что нравится всем циклам в коде. Единственная разница между этими двумя шлейфами в том, что так уж получилось, что они находятся в разных местах памяти и все.

Если у вас есть цикл, и он начинается на 32-байтовой границе, то декодер циклического потока Intel будет обслуживать инструкции из кэша μop, о котором мы говорили ранее. Кэш микроопераций может содержать около 1500 микроопераций. Пока ваш цикл не слишком велик, если вы обслуживаете вещи прямо из кеша μop, тогда вы будете выполнять этот цикл быстрее, не выполняя никакой дополнительной работы самостоятельно.Если он немного менее выровнен, то вы пройдете обычный процесс, который заключается в чтении инструкций, преобразовании их в микрооперации, отправке этих микроопераций и т. д., и это будет немного медленнее. При больших объемах данных или большом количестве их обработки это может иметь значение.

В LLVM есть флаг, который вы можете указать, чтобы сказать: «Хорошо, для целей, к которым мы переходим, выровняйте их все по 32-байтным границам, потому что, эй, тогда у вас не будет этого проблема.Функция align-all говорит, что всякий раз, когда вы создаете функцию, она должна начинаться с 32-байтовой границы. начало цикла должно быть на 32-байтовой границе.Был еще один вариант, который был выравниванием всех блоков и который говорит, что выбрасывать все на 32-байтовую границу, и это излишество — потому что это только те, где вы не беспокоюсь об этом Это только те, где вам нужно перейти к началу цикла, где они должны быть выровнены по 32 байтам.

Вероятно, это вам не поможет; возможно, это поможет вам, и об этом полезно знать, но почти наверняка это не то, что вы получите бесплатно. Я считаю, что JIT будет автоматически выравнивать функции по 32-байтовой границе именно по этой причине.

Важно упомянуть об этом как о структуре кода, потому что перекомпиляция вашего кода может дать разные профили производительности. Был пост в блоге Дениса Бахвалова, где он говорил о том, что есть функция и просто добавление другой функции в код совершенно не вызывается, но само наличие этой функции повлияло на выравнивание, а затем увидело падение производительности.Когда вы проводите измерение производительности, вы должны знать, что простая перекомпиляция вашего кода может перетасовать структуру кода, что может дать разные профили производительности для работы с подобными вещами. В этом конкретном случае эти находки полезны, потому что тогда они, по крайней мере, дадут вам стабильную производительность в том, что касается декодера циклического потока.

Facebook написал инструмент под названием BOLT, который, я думаю, означает Binary Optimization Layout Transformer. Что он будет делать, так это загружать ваш программный код, анализировать его, по существу восстанавливать базовые блоки, с которых он начинался, а затем дефрагментировать их.(Кто-нибудь помнит дефрагментацию дисков? Это, может быть, вещь последнего тысячелетия.) В основном, что он будет делать, так это запускать ваш код, выяснять, где находятся горячие точки. То же самое вам скажет и профильный оптимизатор. Выясните, где находятся эти точки доступа, а затем переупорядочите все блоки так, чтобы все точки доступа занимали меньший объем памяти. Это не меняет самих инструкций, они не работают быстрее, это просто говорит о том, что весь горячий код, который раньше, возможно, находился, скажем, в 10 страницах памяти, теперь помещается в одну или две страницы памяти.Таким образом, вы получаете гораздо лучшее использование кеша и покупных страниц.

Они опубликовали документ arXiv, а внизу есть репозиторий, за которым вы можете следить на слайдах.

Векторизация

Еще я упомянул парсер, SIMD-парсер для обработки векторизации. Это то, что написал Даниэль Лемир, а также несколько других людей, которые могут выполнять векторизованную обработку парсинга файлов JSON.

Как правило, когда вы анализируете JSON, он оказывается в цикле переключения. Является ли этот символ открытой скобкой? Если это так, то идем по этому конкретному пути, потому что мы делаем объект, если это цитата, мы делаем строку и так далее.

Получается, что вместо того, чтобы читать побайтно, вы читаете can 64 байта за раз. Затем вы можете получить гораздо лучшую пропускную способность за счет возможности анализа вашего объекта JSON и создания объекта в результате. Он и несколько других работали над этим подходом для создания синтаксического анализатора JSON и сравнивали его с известными существующими лучшими в открытом исходном коде.Они увидели ускорение примерно в два-три раза в зависимости от того, какой тест они использовали.

Есть несколько причин, почему это быстрее. Во-первых, вместо обработки одного символа за раз мы обрабатываем четыре символа за раз. Во-вторых, у них есть механизм для избегания ответвлений. Одна из вещей, которую вам дадут векторные операции, — это способ выполнения операций маскирования, а затем возможность комбинировать вещи вместе, потому что, как мы говорили ранее, работа предсказателя ветвления, угадывающая, прошли ли вы ветвь или нет, значительно упрощается. когда нет ветки, по которой можно спуститься.Этот конкретный случай был без ветвлений и, следовательно, был намного быстрее для выполнения обработки.

Резюме

Мы говорили о множестве различных способов анализа программ, а также о некоторых методах и некоторых идеях, которые можно использовать для ускорения работы программ. Если вы имеете дело с памятью, вы хотите попытаться использовать выровненную по кешу память или структуры данных с поддержкой кеша, чтобы все было основано на 64-байтовых фрагментах, потому что это реально то, что происходит под обложками или фрагментами размера страницы.Структуры данных, такие как B-деревья, которые исторически часто использовались в базах данных и на дисковых форматах, являются чем-то, что работает относительно хорошо для того, как организована память, и поэтому вы также учитываете это.

Сжимайте данные, чтобы убедиться, что вы можете сжимать и распаковывать данные «на лету» внутри процессора, потому что стоимость перетаскивания памяти обычно является причиной проблем с производительностью.

По возможности избегайте произвольного доступа к памяти. Произвольный доступ к памяти — это то, что снижает производительность поиска в памяти во время выполнения.

Посмотрите, могут ли огромные страницы помочь. Конечно, вы можете получить ускорение на 10% или 15% для некоторых типов приложений, просто включив огромные страницы. Базы данных, как правило, очень чувствительны к этому, и вы должны следовать этим инструкциям, чтобы сказать, хорошо это или плохо.

Настройте источник памяти, просмотрев libnuma и другие элементы управления, которые позволяют указать, где выполняются ваши процессы. Чем более локально вы сможете передавать данные в программу, тем лучше она будет.

Что касается ЦП, то каждый ЦП является собственным сетевым центром обработки данных. Точно так же, как вы думали о системах распределенной обработки, способных перемещать данные и суммировать их между несколькими сетевыми машинами, подумайте об этом также и о том, что происходит внутри вашего сервера. Если вы можете сделать так, чтобы ваши данные были ближе, то они будут обрабатываться намного быстрее, чем если бы данные должны были поступать откуда-то еще.

В частности, спекуляция ветвлениями и промахи кэша памяти обходятся довольно дорого.Ранее был кто-то, кто упомянул, что когда вы думаете о сложности программы, не думайте о ней как о количестве инструкций, которые вы выполняете, а о том, как долго вы можете работать без промаха кеша и действительно учитывать сложность алгоритмов в количество промахов кеша, которые вы нажмете.

Посмотрите на алгоритмы без ветвлений и без блокировки. (На самом деле мы не говорили о блокировке без блокировки, потому что, когда у вас есть блокировки, у вас обычно нет чего-то, что интенсивно использует ЦП, потому что оно заблокировано, ожидая чего-то еще.) Если вы можете использовать программы без блокировок и без ветвлений, то вы получите от этого лучшую производительность, потому что вы не будете конкурировать, и предиктор ветвлений не будет мешать вам.

Затем используйте счетчики производительности с помощью perf или Toplev, чтобы точно указать, где ваша программа замедляется. Это вытягивание памяти, это промахи кеша, которые мы видим, это тот факт, что мы ждем этот конкретный порт отправки?

Используйте векторизацию там, где это возможно.Большинство компиляторов предоставят вам автоматическую векторизацию бесплатно с такими вещами, как развертывание цикла, чтобы обеспечить вам максимально возможную производительность, но может случиться так, что выпадение в ваш собственный векторизованный код или векторизованную сборку имеет смысл для определенных типов операций. . Такие вещи, как JVM, будут использовать векторный код для копирования массива объектов, например, когда он знает, что может просто копировать целые массивы данных с векторными инструкциями, а не в цикле байт за байтом.

Я собрал все ссылки, которые я использовал в презентации на этом слайде, поэтому, если вы не хотите загружать слайд и иметь возможность его использовать, вы можете сфотографировать это, и вы сможете найти его оттуда.

Я также создал раздел ссылок на блоги других людей и другие элементы, которые вы также можете использовать, включая некоторые из тех, которые я упомянул в этой презентации. Это хорошие вещи для продолжения.

Мои ссылки на презентации внизу. Это мой блог вверху и моя лента в Твиттере, где я буду публиковать ссылку на слайд. Если вы нетерпеливы, вы можете перейти на палубу динамиков прямо сейчас. Я уже опубликовал его и пришлю ссылку, как только закончу говорить.Есть и другие ссылки на такие вещи, как мой репозиторий GitHub и другие видео с комментариями, которые я делал в прошлом.

 

Другие презентации с стенограммами

 

Архитектура ЦП

после закона Мура: что дальше?

Рассматривая будущее архитектуры ЦП, некоторые отраслевые обозреватели предсказывают волнение, а некоторые — скуку. Но никто не предсказывает возврата к старым временам, когда скорость удваивалась как минимум раз в два года.

В число оптимистичных прогнозистов входит Дэвид Паттерсон, профессор Калифорнийского университета в Беркли, который буквально написал учебник (вместе с Джоном Хеннесси) по компьютерной архитектуре. «Это будет эпоха возрождения компьютерной архитектуры — это будут захватывающие времена», — говорит он.

Не так уж много, говорит консультант по микропроцессорам Джим Терли, основатель Silicon Insider. «Через пять лет мы будем на 10% впереди, чем сейчас», — прогнозирует он. «Каждые несколько лет проводится университетский исследовательский проект, который думает, что вот-вот перевернет проверенную временем архитектуру, которую признали бы Джон фон Нейман и Алан Тьюринг, и единороги будут танцевать, а бабочки петь.На самом деле этого никогда не происходит, и мы просто заставляем те же компьютеры работать быстрее, и все довольны. С точки зрения коммерческой ценности, устойчивое постепенное улучшение — это путь».

Обе они реагируют на одно и то же: на возрастающую неуместность закона Мура, согласно которому количество транзисторов, которые можно было бы поместить в микросхему по той же цене, удваивалось каждые 18–24 месяца. Чтобы вместить больше, они должны были стать меньше, что позволяло им работать быстрее, хотя и горячее, поэтому производительность с годами росла, но росли и ожидания.Сегодня эти ожидания остаются, но производительность процессора осталась на прежнем уровне.

Плато и дальше

«Все дело в рассеиваемой мощности, — говорит Том Конте, профессор Технологического института Джорджии и бывший президент IEEE Computer Society. «Снятие 150 Вт с квадратного сантиметра — это лучшее, что мы можем сделать, не прибегая к экзотическому охлаждению, которое стоит дороже. Так как мощность связана с частотой, мы не можем увеличить частоту, так как чип станет горячее. Поэтому мы добавляем больше ядер и тактируем их примерно с той же скоростью.Они могут ускорить ваш компьютер, когда на нем запущено несколько программ, но никто не пытается запустить больше нескольких программ одновременно».

Подход достигает точки убывающей отдачи примерно при восьми ядрах, говорит Линли Гвеннап, аналитик The Linley Group. «Восемь параллельных процессов — это предел, и вряд ли какие-либо программы используют более трех или четырех ядер. Вот мы и уперлись в стену при получении скорости от ядер. Сами ядра не становятся намного шире 64 бит.Ядра в стиле Intel могут выполнять около пяти инструкций за раз, а ядра ARM — до трех, но после пяти — точка убывающей отдачи, и нам нужна новая архитектура, чтобы выйти за рамки этого. Суть в том, что традиционное программное обеспечение не станет намного быстрее».

«На самом деле мы уперлись в стену еще в 90-х, — добавляет Конте. «Несмотря на то, что транзисторы становились быстрее, схемы ЦП становились медленнее, поскольку в вычислениях преобладала длина проводов. Мы скрыли этот факт, используя суперскалярную архитектуру [т.е.е., внутренний параллелизм]. Это дало нам ускорение в 2 или 3 раза. Затем мы столкнулись со стеной силы, и нам пришлось прекратить играть в эту игру».

%PDF-1.5 % 1 0 объект >>> эндообъект 2 0 объект > эндообъект 3 0 объект >/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 720 540] /Contents 4 0 R/Group>/Tabs/S/StructParents 0>> эндообъект 4 0 объект > поток [email protected]+y BmiAP =HC+DJiJo3| b6 \\UЊ@XrBZ’x׊q͘hth M𷠬\P`O#F’}6Hn’?l?W؅w> D7+n)v*;76].໰2(ճPJ&cCKF,([[email protected]?&d_’՞Jԟ6vכ]5wSR6 2ҝD«Խ]sW7! конечный поток эндообъект 11 0 объект > эндообъект 12 0 объект [ 13 0 Р] эндообъект 13 0 объект > эндообъект 14 0 объект > эндообъект 15 0 объект > эндообъект 16 0 объект > эндообъект 17 0 объект > эндообъект 18 0 объект > эндообъект 19 0 объект [ 20 0 Р] эндообъект 20 0 объект > эндообъект 21 0 объект > эндообъект 22 0 объект > эндообъект 23 0 объект >/XObject>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 720 540] /Contents 24 0 R/Group>/Tabs/S/StructParents 2>> эндообъект 24 0 объект > поток x}K0c20rkSwQ&|>HY&ƊB.

Добавить комментарий

Ваш адрес email не будет опубликован.