Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Процесс с двумя потоками выполнения, работающий на одном процессоре. Сначала выполняется поток №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. Цикл я + 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 , Sun Microsystems UltraSPARC T2 , Cray XMT , а также микроархитектуры AMD Bulldozer и Zen .

Особенности реализации [ править ]

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

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

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

См. Также [ править ]

  • Суперпоточность
  • Спекулятивная многопоточность

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Обзор процессоров с явной многопоточностью , ACM , март 2003 г., Тео Унгерер, Борут Роби и Юрий Силк
  • Операционная система | Разница между многозадачностью, многопоточностью и многопроцессорностью GeeksforGeeks, 6 сентября 2018 г.