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

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

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

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

Обзор

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

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

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

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

Недостатки

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

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

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

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

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

Крупнозернистая многопоточность

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

Например:

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

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

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

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

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

Многопоточность с чередованием

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

Например:

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

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

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

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

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

Например:

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

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

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

Реализации включают DEC (позже Compaq ) EV8 (не завершен), Intel Технология Hyper-Threading, IBM МОЩНОСТЬ5, Sun Microsystems UltraSPARC T2, Cray XMT, и AMD Бульдозер и Дзен микроархитектуры.

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

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

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

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

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

использованная литература

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

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