слитное чтение короткое целое cuda - PullRequest
0 голосов
/ 19 октября 2010

говорят, что я хочу загрузить массив short из глобальной памяти в общую память. Я не уверен, как слияние работает здесь. В руководстве по передовому опыту говорится, что на устройстве с вычислительными возможностями 1.0 или 1.1 k-й поток в полусфере должен получать доступ к k-му слову в сегменте, выровненном в 16 раз по размеру элементов, к которым осуществляется доступ.

Если я правильно понимаю, если я разбиваю свои данные на сегменты по 32 байта (16 шортов), идентификатор потока 0, 16, 32 ... должен получить доступ к первому элементу каждого сегмента? я должен рассмотреть выравнивание на 64 байта или выравнивание на 128 байтов также? У меня есть GTS 250, так что я думаю, это важно. Советы приветствуются. спасибо.

1 Ответ

2 голосов
/ 19 октября 2010

В соответствии с разделом G.3.2.1 Руководства по программированию CUDA short не будет объединяться на устройствах Compute Capability 1.0 и 1.1 при при любых обстоятельствах.В частности, он гласит:

Размер слова, к которому обращаются потоки, должен составлять 4, 8 или 16 байтов

Однако вы можете использовать векторные типы, такие как1012 *, short4 или даже short8, чтобы получить объединенный доступ.Правила объединения для этих типов также изложены в разделе G.3.2.1.Тем не менее, что касается объединения, то short2 похож на 32-битный int.

FWIW, устройства с вычислительной способностью 1.3 или выше, такие как char и short, гораздо лучше,Чтение char s на устройстве 1.3 может дать вам ~ 60% пиковой пропускной способности памяти против ~ 10% пиковой пропускной способности памяти на устройстве 1.0 или 1.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...