CUDA: размер транзакции памяти для вычислительных возможностей 1.2 или новее

Все, из "Руководства по программированию NVIDIA CUDA 2.0", раздел 5.1.2.1: "Объединение на устройствах с вычислительной способностью 1.2 и выше"

"Найдите сегмент памяти, который содержит адрес, запрашиваемый активным потоком с наименьшим номером. Размер сегмента составляет 32 байта для 8-битных данных, 64 байта для 16-битных данных, 128 байтов для 32-, 64- и 128-битных данных. "

У меня есть сомнение: поскольку в каждом полукарфе есть 16 потоков, если все потоки обращаются к 8-битным данным, то общий размер для каждого полукарпа должен составлять 16 * 8-бит =128 бит = 16 байтов. В то время как "Guide" говорит "32 байта для 8-битных данных". Кажется, половина полосы пропускания потрачена впустую. Я правильно понимаю?

Спасибо дерик

1 ответ

Да. Доступ к памяти всегда осуществляется кусками по 32, 64 или 128 байт, независимо от того, сколько вам на самом деле нужно из этой строки памяти.


Обновить:

Вопрос: Как это объясняет 64 байта для 16-битных данных?

Значение: 32 байта для 1-байтовых слов, 64 байта для 2-байтовых слов и 128 байтов для старших байтов - это максимальный размер сегмента, к которому осуществляется доступ. Если, например, каждый поток извлекает 2-байтовое слово и ваш доступ идеально выровнен, доступ к памяти будет ограничен для использования только 32-байтового извлечения строки.

Ознакомьтесь с разделом G.3.2.2 "Устройства вычислительных возможностей 1.2 и 1.3" в "Руководстве по программированию CUDA (v3.2)".

Я вижу, вы использовали CUDA PG v. 2.0 (и, возможно, компилятор CUDA 2.0). С тех пор было много улучшений (в частности: исправление ошибок).

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