Одна инструкция, несколько потоков

Модель выполнения, используемая в параллельных вычислениях

Single instructions, multiple threads ( SIMT ) — это модель выполнения, используемая в параллельных вычислениях , где single instructions, multiple data (SIMD) сочетается с многопоточностью . Она отличается от SPMD тем, что все инструкции во всех «потоках» выполняются в режиме lock-step. Модель выполнения SIMT реализована на нескольких графических процессорах и актуальна для вычислений общего назначения на графических процессорах (GPGPU), например, некоторые суперкомпьютеры объединяют центральные процессоры с графическими процессорами.

Процессоры, скажем, число p из них, по-видимому, выполняют гораздо больше, чем p задач. Это достигается тем, что каждый процессор имеет несколько "потоков" (или "рабочих элементов" или "последовательности операций SIMD-полосы"), которые выполняются в синхронном режиме и аналогичны полосам SIMD . [1]

Самый простой способ понять SIMT — представить себе многоядерную систему, в которой каждое ядро ​​имеет свой собственный файл регистров, свои собственные АЛУ (как SIMD, так и скалярные) и свой собственный кэш данных, но в отличие от стандартной многоядерной системы, которая имеет несколько независимых кэшей инструкций и декодеров, а также несколько независимых регистров счетчика программ, инструкции синхронно транслируются на все ядра SIMT из одного блока с одним кэшем инструкций и одним декодером инструкций, который считывает инструкции с помощью одного счетчика программ.

Ключевое различие между полосами SIMT и SIMD заключается в том, что каждое из ядер SIMT может иметь совершенно разный указатель стека (и, таким образом, выполнять вычисления с совершенно разными наборами данных), тогда как полосы SIMD являются просто частью АЛУ, которое ничего не знает о памяти как таковой.

История

SIMT была представлена ​​компанией Nvidia в микроархитектуре графического процессора Tesla с чипом G80. [2] [3] ATI Technologies , ныне AMD , выпустила конкурирующий продукт немного позже, 14 мая 2007 года, — графический процессор «R600» на базе TeraScale 1 .

Описание

Поскольку время доступа всех распространенных типов оперативной памяти (например, DDR SDRAM , GDDR SDRAM , XDR DRAM и т. д.) все еще относительно велико, инженеры придумали идею скрыть задержку, которая неизбежно возникает при каждом доступе к памяти. Строго говоря, скрытие задержки является особенностью планирования с нулевыми накладными расходами, реализованного в современных графических процессорах. Это может считаться или не считаться свойством самого «SIMT».

SIMT предназначен для ограничения накладных расходов на выборку инструкций [4] , т. е. задержки, возникающие при доступе к памяти, и используется в современных графических процессорах (например, Nvidia и AMD ) в сочетании со «скрытием задержки» для обеспечения высокопроизводительного выполнения, несмотря на значительную задержку в операциях доступа к памяти. Это когда процессор перегружен вычислительными задачами и может быстро переключаться между задачами, когда в противном случае ему пришлось бы ждать памяти. Эта стратегия сопоставима с многопоточностью в ЦП (не путать с многоядерностью ). [5] Как и в случае с SIMD, еще одним важным преимуществом является совместное использование логики управления многими полосами данных, что приводит к увеличению плотности вычислений. Один блок логики управления может управлять N полосами данных, вместо того чтобы копировать логику управления N раз.

Недостатком выполнения SIMT является тот факт, что поток-специфичный поток управления выполняется с использованием «маскирования», что приводит к плохому использованию, когда потоки процессора следуют разным путям потока управления. Например, для обработки блока IF - ELSE , где различные потоки процессора выполняют разные пути, все потоки должны фактически обрабатывать оба пути (так как все потоки процессора всегда выполняются в блокировке), но маскирование используется для отключения и включения различных потоков по мере необходимости. Маскирование избегается, когда поток управления является согласованным для потоков процессора, т. е. все они следуют одному и тому же пути выполнения. Стратегия маскирования — это то, что отличает SIMT от обычного SIMD, и имеет преимущество недорогой синхронизации между потоками процессора. [6]

Терминология SIMT
Nvidia CUDAOpenCLХеннесси и Паттерсон [7]
НитьРабочий элементПоследовательность операций SIMD Lane
ВарпФронт волныПоток инструкций SIMD
БлокироватьРабочая группаТело векторизованного цикла
СеткаNDRangeВекторизованный цикл

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

Ссылки

  1. ^ Майкл МакКул; Джеймс Рейндерс; Арч Робинсон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Elsevier. стр. 52.
  2. ^ "Технический документ по архитектуре вычислений Nvidia Fermi" (PDF) . www.nvidia.com/ . NVIDIA Corporation. 2009 . Получено 17 июля 2014 г. .
  3. ^ Линдхольм, Эрик; Николс, Джон; Оберман, Стюарт; Монтрим, Джон (2008). «NVIDIA Tesla: унифицированная графика и вычислительная архитектура». IEEE Micro . 28 (2): 6 (требуется подписка.) . doi :10.1109/MM.2008.31. S2CID  2793450.
  4. ^ Рул, Шон; Вандиерендонк, Ханс; Д'Аэне, Йорис; Де Босшер, Коэн (2010). Экспериментальное исследование переносимости производительности ядер OpenCL . Symp. Ускорители приложений в высокопроизводительных вычислениях (SAAHPC). hdl : 1854/LU-1016024 .
  5. ^ "Расширенные темы в CUDA" (PDF) . cc.gatech.edu . 2011 . Получено 28.08.2014 .
  6. ^ Майкл МакКул; Джеймс Рейндерс; Арч Робинсон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Elsevier. стр. 209 и далее.
  7. ^ Джон Л. Хеннесси; Дэвид А. Паттерсон (1990). Архитектура компьютера: количественный подход (6-е изд.). Морган Кауфманн. стр. 314 и далее. ISBN 9781558600690.
Взято с "https://en.wikipedia.org/w/index.php?title=Одна_инструкция,_несколько_потоков&oldid=1199102268"