CUDA: могут ли разные потоки считывать данные из одной и той же ячейки памяти одновременно? - PullRequest
4 голосов
/ 28 сентября 2011

Я пишу программу CUDA для NVIDIA Tesla C2050, где каждый поток должен прочитать строку символов в упорядоченном порядке от позиции 0 до n-1.Размер строки невелик, поэтому он легко помещается в постоянную, разделяемую или текстурную память.

Мой вопрос: будут ли разные потоки обращаться к строке одновременно в одно и то же время или последовательно?Кажется, это повлияет на время выполнения моей программы.

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Ответом будет «Да и Нет».Это зависит от типа памяти.

Как прокомментировал @Jawad, память текстур кэшируется, но я не совсем уверен, что чтение завершено одновременно или оно сериализовано и считано из кеш-памяти.

С другой стороны,Постоянная память транслируется, когда потоки в полусфере считываются из одного и того же местоположения, но сериализуется при чтении из нескольких местоположений.Этот тип памяти также кэшируется.

Наконец, разделяемая память сериализуется, если некоторые потоки пытаются прочитать один и тот же банк памяти, или конфликт банков , но * может передавать несколько потоков одновременно, когдаобслуживание одного запроса на чтение из памяти *.

И это также зависит от вычислительных возможностей вашей графической карты.Я рекомендую вам взглянуть на Руководство по программированию NVIDIA CUDA C (v.3.2 - глава Приложение G., разделы G.3 Compute Capability 1.x и G.4 Compute Capability 2.x).

Надеюсь, этопомощь.

0 голосов
/ 29 сентября 2011

Отобразите память как текстуру, и драйвер автоматически кеширует чтения, т. Е. Если несколько потоков пытаются прочитать из одной глобальной позиции, будет только один вызов глобальной памяти.

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