На ваш вопрос довольно сложно ответить, потому что вы смешиваете вещи.Существуют теоретические (абстрактные) объекты, такие как рабочие элементы и волновые фронты (насколько я знаю, "Wavefront" = "Warp" в терминологии NVIDIA) и физические, такие как процессоры и мультипроцессоры (nvidia).
Теоретические абстракции придуманы, чтобы сделать ваши программы независимыми от базовой аппаратной конфигурации.Чтобы не беспокоить вычислительные индексы процессора, который будет выполнять работу для 16-процессорного графического процессора, а затем выполнять новые вычисления для 32-процессорных графических процессоров, вы просто будете думать с точки зрения волновых фронтов (перекосов), которые имеют постоянные размеры.
Давайте вернемся к вашему вопросу:
«Я знаю, что графические процессоры обычно имеют высокое время доступа к памяти. Однако производительность не сильно снижается, поскольку время доступа»скрытый », выполняя другие инструкции во время ожидания доступа к памяти."
Пример (это не технически правильно, но служит иллюстрацией):
Предположим, что мы делаем 100 арифметическихинструкции, а затем столкнуться с запросом памяти.На физическом уровне выполнение инструкций, выполняемых деформацией / волновым фронтом, выполняется в несколько аппаратных циклов.Вот как выполняется операция с памятью:
Requested address : a, b, c, d, -, -, -, -, -, -, -, -, -, -, -, -
Abstract WorkItems : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
SIMD Hardware cores : 0, 1, 2, 3, -, -, -, -, -, -, -, -, -, -, -, -
Деформация NVIDIA занимает 4 цикла для вычисления:
Requested address : a, b, c, d, e, f, g, h, -, -, -, -, -, -, -, -
Abstract WorkItems : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
SIMD Hardware cores : *, *, *, *, 0, 1, 2, 3, -, -, -, -, -, -, -, -
Позволяет пропустить 3-й цикл.
Requested address : a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p
Abstract WorkItems : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
SIMD Hardware cores : *, *, *, *, *, *, *, *, *, *, *, *, 0, 1, 2, 3
В течение этих 4 циклов накапливаются запросы памяти.
В зависимости от того, какие адреса запрашиваются и насколько интеллектуальным является оборудование, эти запросы объединяются в соответствии со спецификациями оборудования.Предположим, что a..p
упорядочены последовательно в диапазоне 0xFFF0..0xFFFF
, тогда все запросы будут обслуживаться в одной операции объединенной памяти.Если аппаратное обеспечение встречает адреса, которые ему не нравятся (в соответствии со спецификациями), оно будет тормозить доступ к памяти несколькими операциями с памятью.
Поскольку текущая деформация требует операции с памятью, оно приостанавливается, и аппаратное обеспечение переключает физический процессор на следующий.перекос.Новая деформация начинается с выполнения 100 инструкций так же, как это было сделано с помощью предыдущей деформации / волны.После обнаружения и выдачи операции памяти второй варп / волновой фронт также приостанавливается.В этот момент, в зависимости от размера рабочей группы и других параметров, аппаратное обеспечение может возобновить предыдущую деформацию или продолжить со следующими.
Количество деформаций является постоянным во время выполнения ядра и вычисляется на хосте перед выполнением.Запускается, это означает, что если у вас нет этих 100 полезных инструкций до запроса памяти, все ваши деформации будут в приостановленном состоянии, что приведет к зависанию оборудования и потере производительности.