Одна инструкция, несколько потоков
Одна инструкция, несколько потоков ( SIMT ) — это модель выполнения, используемая в параллельных вычислениях , где одна инструкция, несколько потоков (SIMD) сочетается с многопоточностью . Он отличается от SPMD тем, что все инструкции во всех «потоках» выполняются синхронно. Модель выполнения SIMT была реализована на нескольких графических процессорах и актуальна для вычислений общего назначения на графических процессорах (GPGPU), например, некоторые суперкомпьютеры объединяют центральные процессоры с графическими процессорами.
Процессоры, скажем, число p , похоже, выполняют гораздо больше, чем p задач. Это достигается за счет того, что каждый процессор имеет несколько «потоков» (или «рабочих элементов» или «последовательности операций полосы SIMD»), которые выполняются синхронно и аналогичны полосам SIMD . [1]
Самый простой способ понять SIMT — представить себе многоядерную систему, в которой каждое ядро имеет свой собственный файл регистров, свои собственные ALU (как SIMD, так и скалярный) и свой собственный кэш данных, но в отличие от стандартной многоядерной системы, которая имеет Несколько независимых кэшей и декодеров инструкций, а также несколько независимых регистров счетчика программ, инструкции синхронно передаются всем ядрам SIMT из одного устройства с одним кэшем инструкций и одним декодером инструкций, который считывает инструкции с использованием одного счетчика программ.
Ключевое различие между полосами SIMT и SIMD заключается в том, что каждое из ядер SIMT может иметь совершенно другой указатель стека (и, таким образом, выполнять вычисления с совершенно разными наборами данных), тогда как полосы SIMD являются просто частью ALU, которое ничего не знает о памяти как таковой. .
История
[ редактировать ]SIMT был представлен Nvidia в микроархитектуре Tesla GPU с чипом G80. [2] [3] Немного позже, 14 мая 2007 года, компания ATI Technologies , ныне AMD , выпустила конкурирующий продукт — TeraScale 1 на базе R600 графический процессор .
Описание
[ редактировать ]Поскольку время доступа всех распространенных типов оперативной памяти (например, DDR SDRAM , GDDR SDRAM , XDR DRAM и т. д.) все еще относительно велико, инженерам пришла в голову идея скрыть задержку, которая неизбежно возникает при каждом доступе к памяти. Строго говоря, скрытие задержки — это функция планирования с нулевыми издержками, реализованная в современных графических процессорах. Это может считаться, а может и не считаться свойством самого SIMT.
SIMT предназначен для ограничения накладных расходов на выборку команд . [4] т.е. задержка, которая возникает при доступе к памяти и используется в современных графических процессорах (например, Nvidia и AMD ) в сочетании со «скрытием задержки», чтобы обеспечить высокопроизводительное выполнение, несмотря на значительную задержку в операциях доступа к памяти. Здесь процессор перегружен вычислительными задачами и может быстро переключаться между задачами, когда в противном случае ему пришлось бы ждать в памяти. Эту стратегию можно сравнить с многопоточностью процессоров (не путать с многоядерностью ). [5] Как и в случае с SIMD, еще одним важным преимуществом является совместное использование логики управления многими каналами данных, что приводит к увеличению плотности вычислений. Один блок логики управления может управлять N линиями данных вместо того, чтобы повторять логику управления N раз.
Обратной стороной выполнения SIMT является тот факт, что поток управления для конкретного потока выполняется с использованием «маскирования», что приводит к плохому использованию, когда потоки процессора следуют по разным путям потока управления. Например, для обработки блока IF - ELSE , в котором различные потоки процессора выполняют разные пути, все потоки должны фактически обрабатывать оба пути (поскольку все потоки процессора всегда выполняются синхронно), но для отключения и включения используется маскирование. различные темы по мере необходимости. Маскирования избегают, когда поток управления согласован для потоков процессора, т. е. все они следуют одному и тому же пути выполнения. Стратегия маскировки — это то, что отличает SIMT от обычного SIMD и обеспечивает недорогую синхронизацию между потоками процессора. [6]
Нвидиа КУДА | OpenCL | Хеннесси и Паттерсон [7] |
---|---|---|
Нить | Рабочий элемент | Последовательность операций SIMD-полосы |
Деформация | Волновой фронт | Поток инструкций SIMD |
Блокировать | Рабочая группа | Тело векторизованного цикла |
Сетка | NDRange | Векторизованный цикл |
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Майкл МакКул; Джеймс Рейндерс; Арч Робисон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Эльзевир. п. 52.
- ^ «Информационный документ по вычислительной архитектуре NVIDIA Fermi» (PDF) . www.nvidia.com/ . Корпорация NVIDIA. 2009 . Проверено 17 июля 2014 г.
- ^ Линдхольм, Эрик; Николлс, Джон; Оберман, Стюарт; Монтрим, Джон (2008). «NVIDIA Tesla: унифицированная графическая и вычислительная архитектура». IEEE микро . 28 (2):6 (Требуется подписка.) . дои : 10.1109/MM.2008.31 . S2CID 2793450 .
- ^ Рул, Шон; Вандирендонк, Ганс; Д'Хэн, Джорис; Де Босшер, Коэн (2010). Экспериментальное исследование переносимости производительности ядер OpenCL . Симп. Ускорители приложений в высокопроизводительных вычислениях (SAAHPC). hdl : 1854/LU-1016024 .
- ^ «Продвинутые темы по CUDA» (PDF) . cc.gatech.edu . 2011 . Проверено 28 августа 2014 г.
- ^ Майкл МакКул; Джеймс Рейндерс; Арч Робисон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Эльзевир. стр. 209 и далее.
- ^ Джон Л. Хеннесси; Дэвид А. Паттерсон (1990). Компьютерная архитектура: количественный подход (6-е изд.). Морган Кауфманн. стр. 314 и далее. ISBN 9781558600690 .