¿Cuáles son los valores predeterminados para las opciones de arco y de código cuando se utiliza NVCC?
Pregunta
Al compilar el código CUDA, usted tiene que seleccionar para que la arquitectura se genera el código. nvcc
proporciona dos parámetros para especificar esta arquitectura, básicamente:
-
arch
especifica el arquictecture virtual, que puede sercompute_10
,compute_11
, etc. -
code
especifica la arquitectura real, que puede sersm_10
,sm_11
, etc.
Así que un comando como el siguiente:
nvcc x.cu -arch=compute_13 -code=sm_13
código Generará 'cubin' para los dispositivos con capacidad de 1.3 cómputo. Por favor corrígeme si estoy equivocado. Que me gustaría saber es cuales son los valores predeterminados de estos dos parámetros? ¿Qué es la arquitectura predeterminada que utiliza NVCC cuando ningún valor para arch
o code
se especifica?
Solución
Ok, he finalmente logró descubrir los valores por defecto. Mi culpa por no leer todo el capítulo sobre la compilación de la GPU en la documentación NVCC desde el principio hasta el final. Por lo tanto,
nvcc x.cu
es equivalente para
nvcc x.cu –arch=compute_10 -code=sm_10,compute_10
Esos son los valores por defecto. La compilación se realiza de forma predeterminada para la arquitectura compute_10
virtual y el a.out
que resulta de la compilación incluirá el código Cubin para la verdadera arquitectura sm_10
, y el código ensamblador PTX para la arquitectura compute_10
, que se vuelve a compilar 'justo a tiempo' por el conductor si su arquitectura CUDA es mayor que sm_10
.
Otros consejos
Creo que el defecto es compute_10
, como no se puede usar cualquier función compute_13 a menos que se especifique explícitamente que eso es lo que quiere. (Es de suponer que la documentación NVCC que viene con el kit de herramientas CUDA especifica, pero no puedo encontrar un enlace en línea).