Соаллирован ли местный доступ к памяти?
-
26-10-2019 - |
Вопрос
Предположим, я объявляю локальную переменную в функции ядра CUDA для каждого потока:
float f = ...; // some calculations here
Предположим также, что объявленная переменная была размещена компилятором в локальную память (которая такой же, как глобальная, за исключением того, что она видно только для одного потока, насколько я знаю). Мой вопрос в том, будет ли доступ к f
Будьте объединены при его чтении?
Решение
Я не верю, что есть официальная документация о том, как локальная память (или стека на Ферми) изложена в памяти, но я вполне уверен, что распределения мультпроцессора доступны в «полосатом» способе, так что не дают потоки в том же Warp получит объединенный доступ к местной памяти. На Ферми локальная память также кэшируется с использованием того же механизма доступа L1/L2, что и глобальная память.
Другие советы
Карты CUDA не имеют памяти, выделенной для локальных переменных. Все локальные переменные хранятся в регистрах. Сложные ядра с большим количеством переменных уменьшают количество потоков, которые могут работать одновременно, условие, известное как низкая занятость.