Доступ к локальной памяти объединен?
Предположим, я объявляю локальную переменную в функции ядра CUDA для каждого потока:
float f = ...; // some calculations here
Предположим также, что объявленная переменная была помещена компилятором в локальную память (которая такая же, как глобальная, за исключением того, что она видна только для одного потока, насколько мне известно). Мой вопрос будет ли доступ к f
быть объединенным, читая это?
2 ответа
Я не верю, что есть официальная документация о том, как локальная память (или стек в Fermi) размещается в памяти, но я почти уверен, что доступ к многопроцессорному доступу осуществляется "чередующимся" образом, чтобы не расходящиеся потоки в одном и том же Деформация получит объединенный доступ к локальной памяти. В Fermi локальная память также кэшируется с использованием того же механизма доступа L1/L2, что и глобальная память.
Карты CUDA не имеют памяти, выделенной для локальных переменных. Все локальные переменные хранятся в регистрах. Сложные ядра с большим количеством переменных уменьшают количество потоков, которые могут работать одновременно, это состояние известно как низкая занятость.