CUDA объединяет доступ к данным FP64

Я немного запутался в том, как данные FP64 влияют на доступ к памяти, создаваемый деформацией.

  • Деформация всегда состоит из 32 потоков независимо от того, выполняют ли эти потоки вычисления FP32 или FP64. Правильно?
  • Я читал, что каждый раз, когда поток в деформации пытается читать / записывать глобальную память, деформация обращается к 128 байтам (32 числам с одинарной точностью). Правильно?
  • Таким образом, если все потоки в деформации читают различные плавающие одинарной точности (всего 128 байтов) из памяти, но объединенным образом, деформация выдаст одну транзакцию памяти. Правильно?

Вот мой вопрос сейчас:

  • Что если все потоки в деформации пытаются получить доступ к различным плавающим объектам двойной точности (всего 256 байтов) объединенным способом? Будет ли варп выдавать две транзакции памяти (128 + 128)?

PS: меня больше всего интересуют архитектуры Compute Capability 2.0+

1 ответ

Решение

Деформация всегда состоит из 32 потоков независимо от того, выполняют ли эти потоки вычисления FP32 или FP64. Правильно?

Правильный

Я читал, что каждый раз, когда поток в деформации пытается читать / записывать глобальную память, деформация обращается к 128 байтам (32 числам с одинарной точностью). Правильно?

Не совсем. Есть также 32-байтовые размеры транзакций.

Таким образом, если все потоки в деформации читают различные плавающие одинарной точности (всего 128 байтов) из памяти, но объединенным образом, деформация выдаст одну транзакцию памяти. Правильно?

Правильный

Что если все потоки в деформации пытаются получить доступ к различным плавающим объектам двойной точности (всего 256 байтов) объединенным способом? Будет ли варп выдавать две транзакции памяти (128+128)?

Да. Компилятор выдаст 64-битную инструкцию загрузки, которая будет обслуживаться двумя 128-байтовыми транзакциями на деформацию, когда возможен объединенный доступ к памяти.

Другие вопросы по тегам