Исследование производительности многопоточности на Zen 3 и AMD Ryzen 5000

    0
    269

    Одна из историй о первых поколениях процессоров Zen от AMD связана с влиянием одновременной многопоточности (SMT) на производительность. Запустив этот режим, который используется по умолчанию в большинстве ситуаций, пользователи заметили значительное повышение производительности в ситуациях, которыми можно было воспользоваться. Причины такого повышения производительности основаны на двух конкурирующих факторах: во-первых, почему ядро ​​спроектировано таким образом, чтобы оно не использовалось одним потоком, или, во-вторых, построение эффективной стратегии SMT для повышения производительности. В этом обзоре мы рассмотрим последнюю архитектуру AMD Zen 3, чтобы оценить преимущества SMT.

    Что такое одновременная многопоточность (SMT)?

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

    HyperThreading new
    Старый слайд от Intel, у которого есть собственный маркетинговый термин для SMT: Hyper-Threading.

    Когда SMT включен, в зависимости от процессора, он позволяет запускать два, четыре или восемь потоков на этом ядре (мы видели некоторые эзотерические решения для вычислений в памяти с 24 потоками на ядро). Инструкции из любого потока перестраиваются для обработки в одном и том же цикле и позволяют поддерживать высокий уровень использования основных ресурсов. Поскольку используется несколько потоков, это называется извлечением параллелизма на уровне потоков (TLP) из рабочей нагрузки, тогда как один поток с инструкциями, которые могут выполняться одновременно, является параллелизмом на уровне инструкций (ILP).

    SMT – это хорошо?

    Это зависит от того, кого вы спрашиваете.

    SMT2 (два потока на ядро) включает создание структур ядра, достаточных для хранения и управления двумя потоками инструкций, а также управление распределением ресурсов этими структурами ядра. Например, если один конкретный буфер в вашем основном проекте предназначен для обработки до 64 инструкций в очереди, если среднее значение ниже, чем это (например, 40), тогда буфер используется недостаточно, и проект SMT будет включать буфер подается в среднем наверх. Этот буфер может быть увеличен до 96 инструкций в проекте, чтобы учесть это, гарантируя, что если оба потока инструкций работают на «среднем уровне», то у обоих будет достаточный запас. Это означает, что стоит использовать два потока, что всего в 1,5 раза превышает размер буфера. Если все остальное сработает, то производительность будет вдвое выше, чем при проектировании ядра в два раза. Но в режиме ST, где большая часть этого 96-разрядного буфера заполнена менее чем на 40%, поскольку весь буфер должен быть постоянно включен, он может тратить энергию.

    Но если ядро ​​выигрывает от SMT, то, возможно, ядро ​​изначально не было спроектировано оптимально для одного потока производительности. Если включение SMT дает пользователю точную двойную производительность и идеальное масштабирование по всем направлениям, как если бы было два ядра, то, возможно, существует прямая проблема с тем, как спроектировано ядро, от исполнительных блоков до буферов и иерархии кешей. Известно, что пользователи жалуются, что они получают прирост производительности только на 5-10% с включенным SMT, заявляя, что он не работает должным образом – это может быть просто потому, что ядро ​​лучше спроектировано для ST. Точно так же утверждение, что прирост производительности на +70% означает, что SMT работает хорошо, может быть скорее сигналом для несбалансированной конструкции ядра, которая тратит энергию.

    Это дихотомия одновременной многопоточности. Если он работает хорошо, пользователь получает дополнительную производительность. Но если он работает слишком хорошо, возможно, это указывает на то, что ядро ​​не подходит для конкретной рабочей нагрузки. Ответ на вопрос: «SMT – это хорошо?» все сложнее, чем кажется на первый взгляд.

    Мы можем разделить системы, использующие SMT:

    • Высокопроизводительный x86 от Intel
    • Высокопроизводительный x86 от AMD
    • Высокопроизводительный POWER / z от IBM
    • Некоторые высокопроизводительные конструкции на базе Arm
    • Высокопроизводительные вычисления в памяти
    • Высокопроизводительное оборудование искусственного интеллекта

    По сравнению с другими:

    • Высокоэффективный x86 от Intel
    • Все процессоры Arm для смартфонов
    • Успешные высокопроизводительные конструкции на базе Arm
    • Сосредоточенные рабочие нагрузки HPC на x86 с узкими местами вычислений

    (Обратите внимание, что Intel называет свою реализацию SMT «HyperThreading», что является маркетинговым термином специально для Intel).

    На данный момент мы обсуждали только SMT, где у нас есть два потока на ядро, известное как SMT2. Некоторые из более эзотерических конструкций оборудования выходят за рамки SMT на основе двух потоков на ядро ​​и используют до восьми. В документации вы увидите это стилизованное под SMT8, по сравнению с SMT2 или SMT4. Вот как IBM подходит к некоторым своим проектам. Некоторые приложения для вычислений в памяти доходят до SMT24 !!

    Существует четкая тенденция между системами с поддержкой SMT и системами без SMT, и это, похоже, является признаком высокой производительности. Единственное исключение – недавний процессор Apple M1 и ядра Firestorm.

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

    Это позволяет каждому потоку иметь доступ ко всем ресурсам ядра. В некоторых ситуациях с рабочими нагрузками наличие двух потоков на одном ядре будет означать совместное использование ресурсов и вызвать дополнительную непреднамеренную задержку, что может быть важно для рабочих нагрузок с критичной задержкой, где требуется детерминированная (такая же) производительность. Это также уменьшает количество потоков, конкурирующих за емкость L3, если это будет ограничивающим фактором. Кроме того, если требуется какое-либо программное обеспечение для проверки данных в каждом другом рабочем процессе, для 16-ядерного процессора, такого как 5950X, это означает обращение только к 15 другим потокам, а не к 31 потоку, что снижает потенциальные перекрестные помехи, ограниченные межъядерным подключением.

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

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

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

    Ryzen%205000%20Series%20Tech%20Day%20 %20Zen%203%20Architecture%20 %20Deep%20Dive page

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

    SMT на AMD Zen3 и Ryzen 5000

    Как и предыдущие процессоры AMD на базе Zen, серия Ryzen 5000, использующая ядра Zen 3, также имеет дизайн SMT2. По умолчанию он включен в каждой потребительской BIOS, однако пользователи могут отключить его в параметрах прошивки.

    В этой статье мы запустили наш процессор AMD Ryzen 5950X, 16-ядерный высокопроизводительный процессор Zen 3, в режимах SMT Off и SMT On с помощью нашего набора тестов и некоторых стандартных тестов. Цели этих тестов – выяснить ответы на следующие вопросы:

    1. Есть ли преимущество однопоточного отключения SMT?
    2. Насколько прирост производительности дает включение SMT?
    3. Изменится ли производительность на ватт при включении SMT?
    4. Приводит ли включение SMT к увеличению задержки рабочей нагрузки? *

    * более важно для рабочих нагрузок предприятия / базы данных / ИИ

    Лучшим аргументом в пользу включения SMT будет результат «Нет-Да-Нет». И наоборот, лучшим аргументом против SMT будет «Да-Нет-Нет-Да». Но поскольку основные структуры были построены с учетом поддержки SMT, ответы редко бывают настолько однозначными.

    Тестовая система

    Для нашего набора тестов, из-за получения новых модулей памяти DDR4-3200 объемом 32 ГБ для тестирования Ryzen, мы повторно запустили наш стандартный набор тестов на Ryzen 9 5950X с включенным и выключенным SMT. В соответствии с нашей обычной методологией тестирования мы тестируем память в соответствии с официальными спецификациями JEDEC для каждого имеющегося процессора.

    Испытательная установка
    AMD AM4 Ryzen 9 5950X MSI X570
    Богоподобный
    1.B3T13
    AGESA 1100
    Ноктуа
    NH-U12S
    ADATA
    4×32 ГБ
    DDR4-3200
    GPU Sapphire RX 460 2 ГБ (тесты процессора)
    NVIDIA RTX 2080 Ti
    БП OCZ 1250W Золотой
    SSD Crucial MX500 2 ТБ
    Операционные системы Windows 10 x64 1909 г.
    Spectre и Meltdown исправлены
    VRM с вентиляторами Silversone SST-FHP141-VF 173 CFM
    Предыдущая статьяSony выпускает рекламу для PS5 с участием Рика и Морти
    Следующая статьяРазборка Google Pixel 5: самая простая замена экрана?
    Виктор Попанов
    Эксперт тестовой лаборатории. Первый джойстик держал в руках в возрасте 3 лет. Первый компьютер, на котором „работал” был с процессором Intel i386DX-266. Тестирует оборудование для издания ITBusiness. Будь то анализ новейших гаджетов или устранение сложных неполадок, этот автор всегда готов к выполнению поставленной задачи. Его страсть к технологиям и приверженность качеству делают его бесценным помощником в любой команде.