Локальная память: презентация cuda
Я читал этот презентационный документ: http://on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf
На 3-й странице презентации автор заявляет:
Хранение всегда происходит до загрузки - только потоки GPU могут получить доступ к адресам LMEM
Кто-нибудь может объяснить мне, почему? Он имеет в виду, когда локальная память впервые инициализируется?
2 ответа
В этом отношении локальная память - это нечто вроде общей памяти.
Чтобы сделать что-нибудь полезное с разделяемой памятью, вы должны сначала инициализировать (сохранить что-то). То же самое верно для локальной памяти.
Только код потока CUDA может получить доступ к локальной памяти. Нет никаких вызовов CUDA API, таких как
cudaMemcpy
который может получить доступ к локальной памяти. Невозможно инициализировать локальную память из кода хоста.
Те же самые комментарии в основном верны для общей памяти.
"Он имеет в виду, когда локальная память впервые инициализируется?" - Да.
Вы не можете "cudaMemcpy()" для локальной памяти, потому что она находится за пределами глобального адресного пространства. Если вы попытаетесь явно инициализировать локальные переменные, компилятор создает хранилища для локальной памяти, потому что инициализация должна повторяться для каждого блока. Таким образом, невозможно получить определенное значение в локальной памяти, не записав его в первую очередь.