Estoy tratando de entender el uso de recursos para cada uno de mis hilos CUDA para un kernel escrito a mano.Interpretación de salida de --ptxas-options = -v
compilé mi archivo kernel.cu
a un archivo kernel.o
con nvcc -arch=sm_20 -ptxas-options=-v
y me dio el siguiente resultado
ptxas info : Compiling entry function '_Z12searchkernel6octreePidiPdS1_S1_' for 'sm_20'
ptxas info : Function properties for _Z12searchkernel6octreePidiPdS1_S1_
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]
En cuanto a la salida anterior, ¿es correcto decir que
- cada hilo CUDA está usando 46 registros?
- no hay ningún registro derramando a la memoria local?
También estoy teniendo algunos problemas para comprender la salida.
Mi núcleo llama a un montón de funciones
__device__
. ¿Es de 72 bytes la suma total de la memoria para las estructuras de pila de las funciones__global__
y__device__
?¿Cuál es la diferencia entre
0 byte spill stores
y0 bytes spill loads
¿Por qué es la información para
cmem
(que estoy asumiendo que es la memoria constante) se repite dos veces con diferentes figuras? Dentro del kernel no estoy usando ninguna memoria constante . ¿Eso significa que el compilador está, bajo el capó, va a decirle a la GPU que use algo de memoria constante?
'usados' 46 registros indican que el compilador ha reservado 46 registros por hilo para el kernel compilado y los demás registros se derramen. Puede encontrar el número de registros derramados restando este número (46) del número total de registro utilizado en el PTX del kernel. – ahmad
@Ahmad: La primera oración es correcta, pero la segunda no. Un núcleo puede usar menos que los registros máximos permisibles por hilo y no tener derrames en la memoria local. – talonmies
Para elaborar la respuesta de talonmies, PTX es una abstracción de alto nivel con registros infinitos. Esto se debe a que se puede compilar para varias generaciones de GPU y la cantidad de registros puede ser diferente. Solo cuando compila hasta el código específico de la máquina, puede ver realmente el uso del registro. En cualquier caso, ptxas (compilando PTX con el código específico de la máquina) le informa la cantidad de derrames. El compilador – Tom