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