CUDA: размер транзакции памяти для вычислительных возможностей 1.2 или новее - PullRequest
0 голосов
/ 17 марта 2011

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

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

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

Спасибо, Дерик

1 Ответ

2 голосов
/ 18 марта 2011

Да.Доступ к памяти всегда осуществляется кусками по 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).С тех пор было много улучшений (в частности: исправление ошибок).

...