Одновременная многопоточность ( SMT ) — это метод повышения общей эффективности суперскалярных ЦП с помощью аппаратной многопоточности . SMT допускает несколько независимых потоков выполнения для лучшего использования ресурсов, предоставляемых современными архитектурами процессоров .
Термин многопоточность неоднозначен, поскольку на одном ядре ЦП могут одновременно выполняться не только несколько потоков, но и несколько задач (с разными таблицами страниц , разными сегментами состояния задач , разными кольцами защиты , разными разрешениями ввода-вывода и т. д.). Хотя они работают на одном ядре, они полностью отделены друг от друга. Многопоточность по своей концепции похожа на вытесняющую многозадачность , но реализуется на уровне потоков выполнения в современных суперскалярных процессорах.
Одновременная многопоточность (SMT) — одна из двух основных реализаций многопоточности, другая форма — временная многопоточность (также известная как суперпоточность). При временной многопоточности только один поток инструкций может выполняться на любой данной стадии конвейера одновременно. При одновременной многопоточности инструкции из более чем одного потока могут выполняться на любой данной стадии конвейера одновременно. Это делается без больших изменений в базовой архитектуре процессора: основные необходимые дополнения — это возможность извлекать инструкции из нескольких потоков в цикле и больший регистровый файл для хранения данных из нескольких потоков. Количество параллельных потоков определяется разработчиками чипа. Обычно на ядро ЦП приходится два параллельных потока, но некоторые процессоры поддерживают гораздо больше. [1]
Поскольку это неизбежно увеличивает конфликт на общих ресурсах, измерение или согласование его эффективности может быть сложным. Однако измеренная энергоэффективность SMT с параллельными собственными и управляемыми рабочими нагрузками на исторических реализациях Intel SMT ( гиперпоточность ) от 130 нм до 32 нм показала, что в реализациях 45 нм и 32 нм SMT чрезвычайно энергоэффективен, даже с процессорами Atom с последовательным расположением. [2] В современных системах SMT эффективно использует параллелизм с очень небольшой дополнительной динамической мощностью. То есть, даже когда прирост производительности минимален, экономия энергопотребления может быть значительной. [2] Некоторые исследователи [ кто? ] показали, что дополнительные потоки могут использоваться упреждающе для заполнения общего ресурса, такого как кэш, для повышения производительности другого отдельного потока, и утверждают, что это показывает, что SMT не только повышает эффективность. Другие [ кто? ] используют SMT для обеспечения избыточных вычислений для некоторого уровня обнаружения и восстановления ошибок.
Однако в большинстве современных случаев SMT позволяет скрыть задержку памяти , повысить эффективность и увеличить пропускную способность вычислений на единицу используемого оборудования. [ необходима цитата ]
При проектировании процессоров существует два способа увеличения параллелизма на кристалле с меньшими требованиями к ресурсам: один из них — суперскалярная технология, которая пытается использовать параллелизм на уровне инструкций (ILP); другой — многопоточный подход, использующий параллелизм на уровне потоков (TLP).
Суперскалярность означает выполнение нескольких инструкций одновременно, в то время как параллелизм на уровне потоков (TLP) выполняет инструкции из нескольких потоков в одном чипе процессора одновременно. Существует много способов поддержки более одного потока в чипе, а именно:
Ключевым фактором для их различения является то, сколько инструкций процессор может выдать за один цикл и сколько потоков, из которых поступают инструкции. Например, UltraSPARC T1 от Sun Microsystems — это многоядерный процессор, объединенный с мелкозернистой многопоточной техникой вместо одновременной многопоточности, поскольку каждое ядро может выдавать только одну инструкцию за раз.
Хотя многопоточные процессоры существуют с 1950-х годов, одновременная многопоточность была впервые исследована IBM в 1968 году в рамках проекта ACS-360 . [3] Первым крупным коммерческим микропроцессором, разработанным с использованием SMT, был Alpha 21464 (EV8). Этот микропроцессор был разработан DEC в сотрудничестве с Дином Туллсеном из Калифорнийского университета в Сан-Диего и Сьюзан Эггерс и Генри Леви из Вашингтонского университета. Микропроцессор так и не был выпущен, поскольку линейка микропроцессоров Alpha была прекращена незадолго до того, как HP приобрела Compaq, которая, в свою очередь, приобрела DEC . Работа Дина Туллсена также использовалась для разработки гиперпоточных версий микропроцессоров Intel Pentium 4, таких как «Northwood» и «Prescott».
Intel Pentium 4 был первым современным процессором для настольных ПК, реализовавшим одновременную многопоточность, начиная с модели 3,06 ГГц, выпущенной в 2002 году, и с тех пор внедренной в ряд своих процессоров. Intel называет эту функциональность технологией Hyper-Threading и предоставляет базовый двухпоточный движок SMT. Intel заявляет о повышении скорости до 30% [4] по сравнению с в остальном идентичным, не-SMT Pentium 4. Наблюдаемое улучшение производительности очень зависит от приложения; однако при запуске двух программ, требующих полного внимания процессора, на самом деле может показаться, что одна или обе программы немного замедляются, когда включена Hyper-threading. [5] Это связано с тем, что система воспроизведения Pentium 4 связывает ценные ресурсы выполнения, увеличивая конкуренцию за такие ресурсы, как пропускная способность, кэши, TLB , переупорядочивание записей буфера и выравнивание ресурсов процессора между двумя программами, что добавляет различное количество времени выполнения. Ядро Pentium 4 Prescott получило очередь воспроизведения, что сокращает время выполнения, необходимое для системы воспроизведения. Этого оказалось достаточно, чтобы полностью преодолеть этот удар по производительности. [6]
Последние разработки архитектуры MIPS от Imagination Technologies включают систему SMT, известную как «MIPS MT». [7] MIPS MT обеспечивает как тяжелые виртуальные элементы обработки, так и легкие аппаратные микропотоки. RMI , стартап из Купертино, является первым поставщиком MIPS, предоставившим процессор SOC на основе восьми ядер, каждое из которых запускает четыре потока. Потоки могут работать в мелкозернистом режиме, где каждый цикл может выполняться другой поток. Потокам также можно назначать приоритеты. Процессоры MIPS от Imagination Technologies имеют два потока SMT на ядро.
Blue Gene /Q от IBM имеет 4-канальный SMT.
IBM POWER5 , анонсированный в мае 2004 года, поставляется либо как двухъядерный двухчиповый модуль (DCM), либо как четырехъядерный или восьмиядерный многочиповый модуль (MCM), причем каждое ядро включает двухпоточный движок SMT. Реализация IBM более сложна, чем предыдущие, поскольку она может назначать разный приоритет различным потокам, более детализирована, а движок SMT может включаться и выключаться динамически, чтобы лучше выполнять те рабочие нагрузки, где процессор SMT не увеличит производительность. Это вторая реализация IBM общедоступной аппаратной многопоточности. В 2010 году IBM выпустила системы на базе процессора POWER7 с восемью ядрами, каждое из которых имеет четыре одновременных интеллектуальных потока. Это переключает режим потоков между одним потоком, двумя потоками или четырьмя потоками в зависимости от количества потоков процесса, запланированных в данный момент. Это оптимизирует использование ядра для минимального времени отклика или максимальной пропускной способности. IBM POWER8 имеет 8 интеллектуальных одновременных потоков на ядро (SMT8).
IBM Z , начиная с процессора z13 в 2013 году, имеет два потока на ядро (SMT-2).
Хотя многие сообщали, что UltraSPARC T1 от Sun Microsystems (известный как «Niagara» до своего выпуска 14 ноября 2005 года) и ныне несуществующий процессор под кодовым названием « Rock » (первоначально анонсированный в 2005 году, но после многих задержек отмененный в 2010 году) являются реализациями SPARC, ориентированными почти полностью на использование методов SMT и CMP, Niagara на самом деле не использует SMT. Sun называет эти комбинированные подходы «CMT», а общую концепцию — «Throughput Computing». Niagara имеет восемь ядер, но каждое ядро имеет только один конвейер, поэтому на самом деле он использует мелкозернистую многопоточность. В отличие от SMT, где инструкции из нескольких потоков разделяют окно выпуска в каждом цикле, процессор использует политику циклического перебора для выдачи инструкций из следующего активного потока в каждом цикле. Это делает его более похожим на процессор типа «бочка» . Процессор Rock от Sun Microsystems отличается: у него более сложные ядра, которые имеют более одного конвейера.
Oracle Corporation SPARC T3 имеет восемь мелкозернистых потоков на ядро; SPARC T4, SPARC T5, SPARC M5, M6 и M7 имеют восемь мелкозернистых потоков на ядро, из которых два могут выполняться одновременно.
Fujitsu SPARC64 VI имеет крупнозернистую вертикальную многопоточность (VMT), SPARC VII и более новые модели имеют двухпотоковую SMT.
Intel Itanium Montecito использует крупнозернистую многопоточность, а Tukwila и более новые модели используют 2-way SMT (с двухдоменной многопоточностью).
Intel Xeon Phi имеет 4-ходовой SMT (с временным мультиплексированием многопоточности) с аппаратными потоками, которые не могут быть отключены, в отличие от обычной Hyper-Threading. [8] Intel Atom , впервые выпущенный в 2008 году, является первым продуктом Intel, в котором реализован 2-ходовой SMT (продаваемый как Hyper-Threading) без поддержки переупорядочивания инструкций, спекулятивного выполнения или переименования регистров. Intel повторно представила Hyper-Threading с микроархитектурой Nehalem после ее отсутствия в микроархитектуре Core .
FlexFPU микроархитектуры AMD Bulldozer и общий кэш L2 являются многопоточными, но целочисленные ядра в модуле являются однопоточными, поэтому это лишь частичная реализация SMT. [9] [10]
Микроархитектура AMD Zen имеет двухканальную технологию SMT.
Архитектура VISC [11] [12] [13] [14] использует уровень виртуального программного обеспечения (уровень трансляции) для отправки одного потока инструкций в глобальный интерфейс , который разделяет инструкции на виртуальные аппаратные потоки , которые затем отправляются в отдельные виртуальные ядра. Затем эти виртуальные ядра могут отправлять их в доступные ресурсы на любом из физических ядер. Несколько виртуальных ядер могут помещать потоки в буфер переупорядочивания одного физического ядра, который может разделять частичные инструкции и данные из нескольких потоков через порты выполнения одновременно. Каждое виртуальное ядро отслеживает положение относительного вывода. Эта форма многопоточности может повысить производительность одного потока, позволяя одному потоку использовать все ресурсы ЦП. Распределение ресурсов является динамическим на уровне задержки, близком к одному циклу (1–4 цикла в зависимости от изменения распределения в зависимости от индивидуальных потребностей приложения). Поэтому, если два виртуальных ядра конкурируют за ресурсы, существуют соответствующие алгоритмы для определения того, какие ресурсы должны быть выделены и где.
В зависимости от конструкции и архитектуры процессора одновременная многопоточность может снизить производительность, если какой-либо из общих ресурсов является узким местом для производительности. [15] Критики утверждают, что это значительное бремя для разработчиков программного обеспечения, поскольку им приходится проверять, хороша или плоха одновременная многопоточность для их приложения в различных ситуациях, и вставлять дополнительную логику для ее отключения, если она снижает производительность. Текущие операционные системы не имеют удобных вызовов API для этой цели и для предотвращения отнятия ресурсов друг у друга процессами с разным приоритетом. [16]
Также существует проблема безопасности с некоторыми реализациями одновременной многопоточности. Гиперпоточность Intel в процессорах на базе NetBurst имеет уязвимость, из-за которой одно приложение может украсть криптографический ключ из другого приложения, работающего на том же процессоре, отслеживая использование его кэша. [17] Существуют также сложные эксплойты машинного обучения для реализации HT, которые были описаны на Black Hat 2018. [ 18]