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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Одновременная многопоточность[1] (англ. Simultaneous Multithreading — SMT) — одна из двух главных форм многопоточности, которая может быть реализована в процессорах аппаратно. Второй формой является временная многопоточность. Технология одновременной многопоточности позволяет исполнять инструкции из нескольких независимых потоков выполнения на множестве функциональных модулей суперскалярного микропроцессора в одном цикле.

История и реализации[править | править код]

Впервые одновременная многопоточность была представлена в исследовательских работах Дина Таллсена (Dean Tullsen) в 1995 г. (Калифорнийский университет в Сан-Диего)[2][3][4][5].

Первым процессором с реализацией одновременной многопоточности мог бы стать микропроцессор Alpha 21464 компании DEC, который был объявлен в 1999 году. Процессор разрабатывался командой под руководством главного архитектора Джоэла Эмера (англ.). Процессор был одноядерным, суперскалярным с 8 конвейерами, имел 4 комплекта регистров для переключения контекста и мог потенциально выполнять 4 потока одновременно. 2-кратное увеличение производительности получалось всего лишь за счет 10%-ного увеличения количества логических элементов. Во многом процессор воплощал предложения и подходы, изложенные в работах Дина Таллсена, соавтором чьих работ выступали некоторые члены команды «Alpha» (Джоэл Емер и Ребекка Штамм (Rebecca Stamm)). Однако Alpha 21464 так и не появился на рынке, он пал жертвой корпоративных слияний и поглощений[6].

Таким образом первой реализацией одновременной многопоточности на рынке стала технология Hyper-threading компании Intel, представленная в 2002 г. в серверных процессорах Xeon и в Pentium 4[7] (микроархитектура NetBurst).

Когда компания Intel обратилась к многоядерной архитектуре микропроцессоров, ради упрощения дизайна она не перенесла технологию Hyper-threading на новые процессоры. В результате первым многоядерным процессором с одновременной многопоточностью на каждом ядре стал процессор IBM POWER5 (2004 г.)[8]. В конце концов Intel вернула Hyper-threading в свои процессоры в архитектуре Nehalem (2008 г.)[9].

Критика[править | править код]

В 2021 году, группа исследователей, включающая Грацский технический университет, технологический институт Джорджии и некоммерческий исследовательский центр «Lamarr Security Research», обнаружили уязвимость в технологии SMT, реализованной в процессорах AMD с архитектурами Zen, Zen 2 и Zen 3. Уязвимость, получившая название SQUIP[10] (Scheduler Queue Usage via Interference Probing — использование очереди планировщика через анализ помех), позволяет злоумышленникам получать доступ к конфиденциальным данным, о чем, в декабре 2021 года, было сообщено AMD. В ходе демонстрации уязвимости, исследователи «взломали» ключ шифрования RSA-4096[11][12]. AMD, присвоив уязвимости идентификатор CVE-2021-46778 и «средний» рейтинг важности, в августе 2022 года опубликовала бюллетень с рекомендациями смягчения уязвимости[13].

Сравнение с другими технологиями[править | править код]

Производительность суперскалярных микропроцессоров увеличивается за счёт одновременного исполнения нескольких инструкций в одном цикле, однако она ограничивается зависимостями между инструкциями (которые ограничивают возможности параллельного исполнения, в результате чего в цикле может исполняться не максимально возможное количество инструкций) и операциями с большой задержкой внутри одного потока выполнения (которые приводят к появлению циклов, в которых не исполняется ни одна инструкция — pipeline stalls).

Архитектуры с аппаратной многопоточностью выполняют несколько потоков с возможностью быстрого переключения контекста между ними. Такая «традиционная» многопоточность скрывает задержки памяти и функциональных модулей (снижая количество «пустых» циклов), хотя в каждом конкретном цикле исполняются инструкции из одного потока. Однако увеличение количества одновременно исполняемых инструкций снижает возможности традиционной многопоточности.

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

Иллюстрация одновременной многопоточности: 4 потока исполняются одновременно на 4-конвейерном микропроцессоре

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

Примечания[править | править код]

  1. Два в одном //Computerra (09.11.2001). Дата обращения: 21 ноября 2016. Архивировано 21 ноября 2016 года.
  2. Simultaneous Multithreading Project. Дата обращения: 31 мая 2017. Архивировано 1 июня 2017 года.
  3. Dean Tullsen’s Publications. Дата обращения: 4 июня 2017. Архивировано 9 июня 2017 года.
  4. см. работу Dean M.Tullsen, Susan J. Eggers, and Henry M.Levy. Simultaneous multithreading: Maximizing on-chip parallelism. In Proceedings of the International Symposium on Computer Architecture, June 1995
  5. докторская диссертация Simultaneous Multithreading, D.M. Tullsen, Ph.D. Thesis, University of Washington, August, 1996.
  6. NemirovskyTullsen, 2013, p. 72.
  7. NemirovskyTullsen, 2013, p. 74.
  8. NemirovskyTullsen, 2013, p. 34.
  9. NemirovskyTullsen, 2013, p. 81.
  10. SQUIP: Exploiting the Scheduler Queue Contention Side ChannelPDF
  11. Anton Shilov. New Vulnerability Affects All AMD Zen CPUs: Threading May Need to Be Disabled (англ.). Tom’s Hardware (11 августа 2022). Дата обращения: 12 августа 2022.
  12. Владимир Фетисов. Выяснилось, что технология SMT в процессорах Ryzen и EPYC позволяет красть конфиденциальные данные. 3DNews (11 августа 2022). Дата обращения: 12 августа 2022.
  13. Execution Unit Scheduler Contention Side-Channel Vulnerability on AMD Processors (англ.). AMD (8 сентября 2022). Дата обращения: 12 августа 2022.

Литература[править | править код]

  • Jurij Silc, Borut Robic, Theo Ungerer. Processor Architecture - From Dataflow to Superscalar and Beyond. — Springer, 1999. — ISBN 3540647988. (англ.) — Глава 6.4: Simultaneous Multithreading, стр.281-293
  • Mario Nemirovsky, Dean M. Tullsen. Multithreading Architecture. — Morgan and Claypool Publishers, 2013. — ISBN 1608458555. (англ.)

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

  • Dean M. Tullsen, Susan J. Eggers, Henry M. Levy. Simultaneous Multithreading: Maximizing On-Chip Parallelism (англ.) (PostScript). Материалы 22-го ежегодного симпозиума по компьютерной архитектуре. University of Washington (1995). Дата обращения: 20 ноября 2012. Архивировано 23 января 2013 года.
  • (2005-02) Operating system support for simultaneous multithreaded processors — James R. Bulpin — UCAM-CL-TR-619 — диисертация на тему поддержки одновременной многопоточности в разных операционных системах (англ.)