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

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Simultaneous multithreading»)
Перейти к: навигация, поиск

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Два в одном //Computerra (09.11.2001)
  2. Simultaneous Multithreading Project
  3. Dean Tullsen's Publications
  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.

Литература[править | править вики-текст]

  • 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. (англ.)

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