Я пытаюсь понять использование ресурсов для каждого из моих потоков CUDA для рукописного ядра.
Я скомпилировал свой файл kernel.cu
файл kernel.o
с помощью nvcc -arch=sm_20 -ptxas-options=-v
и я получил следующий вывод (пропущенный через c++filt
):
ptxas info : Compiling entry function 'searchkernel(octree, int*, double, int, double*, double*, double*)' for 'sm_20'
ptxas info : Function properties for searchkernel(octree, int*, double, int, double*, double*, double*)
72 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 176 bytes cmem[0], 16 bytes cmem[14]
Глядя на вывод выше, правильно ли сказать, что
- каждый поток CUDA использует 46 регистров?
- нет разливов регистров в локальную память?
У меня также есть некоторые проблемы с пониманием результатов.
-
Мое ядро вызывает множество функций
__device__
. IS 72 байта - общая сумма памяти для стековых кадров функций__global__
и__device__
? -
В чем разница между
0 byte spill stores
0 bytes spill loads
-
Почему информация для
cmem
(которая, как я предполагаю, является постоянной памятью) повторяется дважды с разными цифрами? Внутри ядра я не использую постоянную память. Означает ли это, что компилятор скрытно скажет графическому процессору использовать некоторую постоянную память?
Этот вопрос "продолжается" в: Интерпретация подробного вывода ptxas, часть II