No encuentro mucha información útil sobre la información de PTX --ptxas-options=-v
Encontré un pdf de NVCC 2008 que tiene una pequeña propaganda, pero no detalles.
1) ¿Qué significa 64 bytes cmem[0], 12 bytes cmem[16]
? Entiendo que se refiere a la memoria constante. No uso ninguna memoria constante en el código, así que esto debe provenir del compilador. (¿Qué entra en RO mem?)
2) ¿Qué significa 49152+0 bytes smem
? Sí, es memoria compartida, pero ¿qué significan los dos?
3) ¿Hay algún documento que me ayude con esto? (¿Cómo se llama?)
4) ¿Dónde puedo encontrar un documento que explique el archivo * .ptx? (Me gustaría ser capaz de leer/entender el código CUDA compl.)CUDA: Comprender la información de PTX
Respuesta
cmem
se dicussed here. En su caso, significa que se utilizan 64 bytes para pasar argumentos al kernel y 12 bytes están ocupados por constantes generadas por el compilador.En el caso de
smem
, el primer número es la cantidad de datos que solicita su código, y el segundo número (0
) indica cuánta memoria se utiliza para el sistema.No conozco ninguna información oficial con respecto al formato de salida detallado
ptxas
. P.ej. en "CUDA Occupancy calculator" simplemente dicen que suman los valores parasmem
sin ninguna explicación.Hay varios documentos de PTX en nVidia website. El más fundamental es PTX: Parallel Thread Execution ISA Version 3.0.
Consulte "Miscellaneous NVCC Usage". Mencionan, que la asignación bancaria constante es específica del perfil.
En el PTX guide, dicen que aparte de 64KB de memoria constante, tenían 10 bancos más para memoria constante. El controlador puede asignar e inicializar búferes constantes en estas regiones y pasar punteros a los búferes como parámetros de la función kernel.
Supongo que ese perfil dado para nvcc se ocupará de qué constantes entren en cada memoria. De todos modos, no tenemos que preocuparnos si cada memoria constante cmem [n] es inferior a 64 KB, porque cada banco es de tamaño 64 KB y es común a todos los hilos en la red.
- 1. Cómo generar C/C++ anotado PTX en CUDA 4.1/4.2/5.0
- 2. ¿Debería consultar PTX para optimizar mi kernel? ¿Si es así, cómo?
- 3. CUDA deshabilitar la caché L1 solo para una variable
- 4. Comprender la función de mapa
- 5. Comprender la salida de uname
- 6. Comprender la vulnerabilidad de Wordpress
- 7. Comprender la salida de Ruby-prof
- 8. Comprender la recursividad en Java
- 9. ¿Cómo usar clang para compilar código OpenCL a ptx?
- 10. Comprender la anotación en Java
- 11. Codificando CUDA con C#?
- 12. Android - Comprender View.getLocalVisibleRect (Rect)
- 13. Comprender xcode linking (ld)
- 14. Comprender JNDI
- 15. Implementación de MySQL con CUDA
- 16. Dibujando triángulos con CUDA
- 17. Comprender la inseguridad de Python Pickle
- 18. Comprender la necesidad de un marco DI
- 19. Ayuda para comprender la optimización de C#
- 20. Intentando comprender la jerarquía de vista
- 21. Comprender la eficacia de std :: string
- 22. printf dentro de la función CUDA __global__
- 23. CUDA no corrientes de la superposición
- 24. Comprender NSRunLoop
- 25. CUDA __threadfence()
- 26. versión de C++ admitida por cuda 5.0
- 27. versión del controlador CUDA es insuficiente para la versión de tiempo de ejecución CUDA
- 28. Modelo CUDA: ¿cuál es el tamaño de la urdimbre?
- 29. Comprender MongoMappers many relationship
- 30. CUDA: ¿diferencia entre el temporizador de la CPU y el evento del temporizador CUDA?
cmem [x] - x = mem bank #: 0 = kernel param data/info, 2 = almacenamiento constante definido por el usuario, 14 & 16 = almacenamiento constante generado por el compilador – Doug