Вопрос

Предположим, я объявляю локальную переменную в функции ядра CUDA для каждого потока:

float f = ...; // some calculations here

Предположим также, что объявленная переменная была размещена компилятором в локальную память (которая такой же, как глобальная, за исключением того, что она видно только для одного потока, насколько я знаю). Мой вопрос в том, будет ли доступ к f Будьте объединены при его чтении?

Это было полезно?

Решение

Я не верю, что есть официальная документация о том, как локальная память (или стека на Ферми) изложена в памяти, но я вполне уверен, что распределения мультпроцессора доступны в «полосатом» способе, так что не дают потоки в том же Warp получит объединенный доступ к местной памяти. На Ферми локальная память также кэшируется с использованием того же механизма доступа L1/L2, что и глобальная память.

Другие советы

Карты CUDA не имеют памяти, выделенной для локальных переменных. Все локальные переменные хранятся в регистрах. Сложные ядра с большим количеством переменных уменьшают количество потоков, которые могут работать одновременно, условие, известное как низкая занятость.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top