es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Especifica la arquitectura de CUDA utilizando CMake para la compilación de CUDA.

Tengo el siguiente código de cmake y cuda para generar una arquitectura cuda 750, sin embargo, esto siempre resulta en un CUDAARCH = 300 (2080 ti con cuda 10.1). Intenté tanto set_property como target_compile_options, pero ambos fallaron. ¿Tenemos una solución para cuda_add_executable y cuda_add_library en este caso para que la parte -gencode sea efectiva?

cmake minimum required(VERSION 3.18)
project(Hello)
find package(CUDA REQUIRED)
cuda add executable(oounne ttt.cu)
set property(TARGET oounne PROPERTY CUDA ARCHITECTURES 75)

“`c++
#include <cstdio>

#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

<strong>device</strong> void print_arch(){
const char my_compile_time_arch[] = STR(CUDA ARCH);
printf("CUDA ARCH: %s\n", my_compile_time_arch);
}

<strong>global</strong> void example()
{
print_arch();
}

int main(){

example<<<1,1>>>();
cudaDeviceSynchronize();
}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Las funciones cuda_add_executable y cuda_add_library en CMake se utilizan para generar ejecutables y bibliotecas respectivamente, que dependen de CUDA. Para generar código para una arquitectura específica de CUDA, podemos establecer la propiedad CUDA_ARCHITECTURES de nuestro objetivo a la arquitectura deseada utilizando el comando set_property.

    Sin embargo, en el código proporcionado, establecer la propiedad CUDA_ARCHITECTURES en 75 no resultó en el uso de la arquitectura de CUDA esperada.

    Una solución a este problema es utilizar el comando target_compile_options con la opción --generate-code. Esta opción se puede utilizar para especificar la arquitectura de CUDA deseada, así como las versiones correspondientes de PTX y SASS (cubin).

    Aquí hay una versión actualizada del script de CMake que utiliza el comando target_compile_options para generar código para la arquitectura de cómputo 75:

    cmake_minimum_required(VERSION 3.18)
    project(Hello)
    
    find_package(CUDA REQUIRED)
    
    cuda_add_executable(oounne ttt.cu)
    
    # Usando target_compile_options para especificar la arquitectura y las versiones correspondientes de ptx y sass
    target_compile_options(oounne PRIVATE $<$<compile_language:cuda>:--generate-code arch=compute_75,code=sm_75>)
    
    

    Ten en cuenta que se utiliza el comando target_compile_options con la expresión generadora $<$<compile_language:cuda> para asegurarse de que las opciones solo se apliquen al código CUDA.

    Con este script de CMake actualizado, el código generado debería ser para la arquitectura de cómputo 75, lo cual se puede verificar ejecutando el ejecutable ttt y comprobando la salida de la variable __CUDA_ARCH__.

    “`c++
    #include

    #define STR_HELPER(x) #x
    #define STR(x) STR_HELPER(x)

    device void print_arch(){
    const char my_compile_time_arch[] = STR(CUDA_ARCH);
    printf(“CUDA_ARCH: %s\n”, my_compile_time_arch);
    }

    global void example()
    {
    print_arch();
    }

    int main(){

    example<<<1,1>>>();
    cudaDeviceSynchronize();
    }


    Salida:

    CUDA_ARCH: 750
    “`

    Como se muestra arriba, la salida de __CUDA_ARCH__ es 750, lo cual corresponde a la arquitectura de cómputo 75.

Comments are closed.