Saltar al contenido

Cuda Hello World printf no funciona incluso con -arch = sm_20

Hola, descubrimos la respuesta a lo que andabas buscando, desplázate y la obtendrás aquí.

Solución:

Si estas usando printf en el kernel, debes usar cudaDeviceSynchronize():

#include 
#include 
#include 
#include 

__global__ void test()
    printf("Hi Cuda World");


int main( int argc, char** argv )

    test<<<1,1>>>();
    cudaDeviceSynchronize();
    return 0;

En el kernel, printf solo se admite en hardware con capacidad de cómputo 2 o superior. Porque su proyecto está listo para construir ambos capacidad de cómputo 1.0 y cómputo 2.1, nvcc compila el código varias veces y construye un objeto fatbinary de arquitectura múltiple. Es durante el ciclo de compilación de la capacidad de cálculo 1.0 cuando se genera el error, porque printf la llamada no es compatible por esa arquitectura.

Si elimina el destino de compilación de la capacidad de cálculo 1.0 de su proyecto, el error desaparecerá.

Alternativamente, podría escribir el kernel así:

__global__ void test()

#if __CUDA_ARCH__ >= 200
    printf("Hi Cuda World");
#endif

El __CUDA_ARCH__ El símbolo solo será> = 200 cuando se compile para capacidad de cómputo 2.0 o objetivos altos y esto le permitiría compilar este código para dispositivos de capacidad de cómputo 1.x sin encontrar un error de sintaxis.

Al compilar para la arquitectura correcta y no obtener salida, también debe asegurarse de que el kernel finalice y el controlador vacíe el búfer de salida. Para hacer esto, agregue una llamada de sincronización después del lanzamiento del kernel en el código de host

por ejemplo:

int main( int argc, char** argv )


    test<<<1,1>>>();
    cudaDeviceSynchronize();
    return 0;

[disclaimer: all code written in browser, never compiled, use at own risk]

Si hace ambas cosas, debería poder compilar, ejecutar y ver el resultado.

Te invitamos a añadir valor a nuestra información aportando tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *