Доступ к локальной памяти объединен?

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

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

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

2 ответа

Решение

Я не верю, что есть официальная документация о том, как локальная память (или стек в Fermi) размещается в памяти, но я почти уверен, что доступ к многопроцессорному доступу осуществляется "чередующимся" образом, чтобы не расходящиеся потоки в одном и том же Деформация получит объединенный доступ к локальной памяти. В Fermi локальная память также кэшируется с использованием того же механизма доступа L1/L2, что и глобальная память.

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

Другие вопросы по тегам