Одновременная многопоточность
Одновременная многопоточность[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).
Архитектуры с аппаратной многопоточностью выполняют несколько потоков с возможностью быстрого переключения контекста между ними. Такая «традиционная» многопоточность скрывает задержки памяти и функциональных модулей (снижая количество «пустых» циклов), хотя в каждом конкретном цикле исполняются инструкции из одного потока. Однако увеличение количества одновременно исполняемых инструкций снижает возможности традиционной многопоточности.
Одновременная многопоточность объединяет параллельное исполнение инструкций суперскалярной архитектуры с аппаратной многопоточностью. Применение одновременной многопоточности, благодаря динамическому распределению функциональных модулей процессора между потоками, увеличивает использование процессора при наличии задержек памяти и ограниченной возможности параллельного исполнения инструкций внутри потока.
Многоядерные микропроцессоры по своей организации наиболее близки к микропроцессорам с одновременной многопоточностью — имеют несколько наборов регистров, несколько функциональных модулей и суперскалярность каждого из ядер. Главное отличие между ними заключается в распределении ресурсов — в многоядерном процессоре каждый поток получает фиксированное количество функциональных модулей процессора, тогда как в процессоре с одновременной многопоточностью распределение модулей изменяется в каждом цикле. Вследствие этого процессоры с одновременной многопоточностью показывают большую производительность при максимальной загрузке потоками, а при снижении количества потоков производительность падает медленней, по сравнению с многоядерным процессором.
ПримечанияПравить
- ↑ Два в одном //Computerra (09.11.2001) (неопр.). Дата обращения: 21 ноября 2016. Архивировано 21 ноября 2016 года.
- ↑ Simultaneous Multithreading Project (неопр.). Дата обращения: 31 мая 2017. Архивировано 1 июня 2017 года.
- ↑ Dean Tullsen’s Publications (неопр.). Дата обращения: 4 июня 2017. Архивировано 9 июня 2017 года.
- ↑ см. работу 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
- ↑ докторская диссертация Simultaneous Multithreading, D.M. Tullsen, Ph.D. Thesis, University of Washington, August, 1996.
- ↑ NemirovskyTullsen, 2013, p. 72.
- ↑ NemirovskyTullsen, 2013, p. 74.
- ↑ NemirovskyTullsen, 2013, p. 34.
- ↑ NemirovskyTullsen, 2013, p. 81.
- ↑ SQUIP: Exploiting the Scheduler Queue Contention Side ChannelPDF
- ↑ Anton Shilov. New Vulnerability Affects All AMD Zen CPUs: Threading May Need to Be Disabled (англ.). Tom’s Hardware (11 августа 2022). Дата обращения: 12 августа 2022.
- ↑ Владимир Фетисов. Выяснилось, что технология SMT в процессорах Ryzen и EPYC позволяет красть конфиденциальные данные (рус.). 3DNews (11 августа 2022). Дата обращения: 12 августа 2022.
- ↑ 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 — диисертация на тему поддержки одновременной многопоточности в разных операционных системах (англ.)