stringtranslate.com

Многопоточность (компьютерная архитектура)

Процесс с двумя потоками выполнения, выполняемый на одном процессоре. Поток №1 выполняется первым, в конечном итоге запускает поток №2 и ждет ответа. Когда поток № 2 завершается, он сигнализирует потоку № 1 о возобновлении выполнения до завершения, а затем завершается.
Процесс с двумя потоками выполнения, выполняемый на одном процессоре

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

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

Обзор

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

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

Преимущества

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

Недостатки

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

Общая эффективность варьируется; Intel заявляет об улучшении скорости до 30% благодаря своей технологии Hyper-Threading [1] , в то время как синтетическая программа, просто выполняющая цикл неоптимизированных зависимых операций с плавающей запятой, на самом деле получает улучшение скорости на 100% при параллельном запуске. С другой стороны, настроенные вручную программы на языке ассемблера , использующие расширения MMX или AltiVec и выполняющие предварительную выборку данных (как это может делать хороший видеокодер), не страдают от промахов в кэше или простоя вычислительных ресурсов. Таким образом, такие программы не получают преимуществ от аппаратной многопоточности и действительно могут наблюдать снижение производительности из-за конкуренции за общие ресурсы.

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

Типы многопоточности

Чередованная/временная многопоточность

Грубая многопоточность

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

Например:

  1. Цикл i : выдается инструкция j из потока A.
  2. Цикл i + 1 : выдается инструкция j + 1 из потока A.
  3. Цикл i +2 : выдается инструкция j +2 из потока A , которая представляет собой инструкцию загрузки, которая отсутствует во всех кэшах.
  4. Цикл i + 3 : вызывается планировщик потоков, переключается на поток B.
  5. Цикл i + 4 : выдается инструкция k из потока B.
  6. Цикл i + 5 : выдается инструкция k + 1 из потока B.

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

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

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

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

Мелкозернистая многопоточность

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

Например:

  1. Цикл i + 1 : выдается инструкция из потока B.
  2. Цикл i + 2 : выдается инструкция из потока C.

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

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

Одновременная многопоточность

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

Например:

  1. Цикл i : одновременно выдаются инструкции j и j +1 из потока A и инструкция k из потока B.
  2. Цикл i + 1 : инструкция j + 2 из потока A , инструкция k + 1 из потока B и инструкция m из потока C выполняются одновременно.
  3. Цикл i + 2 : инструкция j + 3 из потока A и инструкции m + 1 и m + 2 из потока C выполняются одновременно.

Чтобы отличить другие типы многопоточности от SMT, термин « временная многопоточность » используется для обозначения случаев, когда одновременно могут выполняться инструкции только из одного потока.

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

Внедрения включают DEC (позже Compaq ) EV8 (не завершено), Intel Hyper-Threading Technology , IBM POWER5 / POWER6 / POWER7 / POWER8 / POWER9 , IBM z13 / z14 / z15 , Sun Microsystems UltraSPARC T2 , Cray XMT и AMD Bulldozer и Zen. микроархитектуры.

Особенности реализации

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

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

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

Смотрите также

Рекомендации

  1. ^ «Технология Intel Hyper-Threading, Техническое руководство пользователя» (PDF) . п. 13. Архивировано из оригинала (PDF) 21 августа 2010 г.

Внешние ссылки