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-байтовыми транзакциями на деформацию, когда возможен объединенный доступ к памяти.