Потоки CUDA, SMX, SP и блоки, как они работают?


Я немного запутался в том, как работает CUDA, выполняют ли потоки каждую одну и ту же инструкцию (SIMT), но используя одни и те же данные, доступные с разными индексами? Или это считается "разными данными" (так что это тоже SIMD)?

- это сульфаметоксазола весь чип ГПУ? SMX должен состоять из нескольких SP, каждый из которых выполняет один поток одновременно, является ли блок потоков, назначенный только одному SP?

Я сейчас немного растерян

1 5

1 ответ:

Запуск сетки-это 1-3-мерный запуск блоков резьбы. Блок резьбы-это 1-3-мерная группа резьб. Работа на CUDA распределитель распределяет поток блокируется на SMX блоков. Устройство низкого уровня может иметь 1 блок SMX. Устройство высокого класса может иметь более 10 единиц SMX.

Модуль SMX разбивает блоки потоков на группы из 32 потоков, называемых деформациями. Блок SMX может иметь не более 64 искажений или 16 блоков, выделенных одновременно. Из-за ограничений ресурсов (блоки, искажения, регистры на поток, общие памяти на блок или барьеры) число может быть меньше.

Каждый блок SMX имеет 4 планировщика деформации, каждый из которых отвечает за подмножество деформаций. На каждом цикле планировщик варпа выберет подходящий варп и выдаст 1 или 2 инструкции. Для того чтобы выполнить две инструкции одновременно, они должны быть независимыми и использовать разные исполнительные устройства. Например, одна команда может быть отправлена в блок с плавающей запятой, а вторая-в блок хранения нагрузки.

В дополнение к двойной выдаче варпа планировщик может выдавать спина к спине независимые инструкции для варпа. Когда обнаруживается зависимость, или блок выполнения следующей инструкции занят, или варп не имеет инструкции (ожидающей выборки), то планировщик варпа выберет другой варп, если он подходит.

Каждый поток имеет свой собственный набор регистров общего назначения, кодов условий, кодов предикатов и локальной памяти. Каждый поток является членом блока потока. Все потоки могут получить доступ к блоку потоков ресурсы, включающие общую память и барьеры. Все потоки в запуске сетки могут получить доступ к ресурсам сетки, которые включают постоянную память, привязки текстуры и привязки поверхности. Все потоки могут получить доступ к глобальной памяти.