ultima tutorial para mundo hola activar c++ visual-studio-2008 cuda

c++ - tutorial - Símbolos externos no resueltos en el programa CUDA para principiantes



cuda ultima version (2)

Supongo que te falta vincular a la biblioteca correcta. Asegúrese de tener la biblioteca CUDA agregada en "Propiedades de configuración-> Enlazador-> Entrada". Referir esto .

Creo una nueva aplicación de consola Win32 como proyecto vacío. Estoy ejecutando Windows 7 de 64 bits con Visual Studio 2008 C ++. Estoy intentando obtener el código de muestra de la parte inferior de este artículo para compilar: http://www.ddj.com/architect/207200659

Agrego CUDA Build Rule v2.3.0 a las reglas de compilación personalizadas del proyecto. Es lo único con una casilla de verificación en la lista de archivos de reglas disponibles

Creo moveArrays.cu en los archivos de origen (carpeta / filtro ???)

En ese archivo agrego el siguiente código:

// moveArrays.cu // // demonstrates CUDA interface to data allocation on device (GPU) // and data movement between host (CPU) and device. #include <stdio.h> #include <assert.h> #include <cuda.h> int main(void) { float *a_h, *b_h; // pointers to host memory float *a_d, *b_d; // pointers to device memory int N = 14; int i; // allocate arrays on host a_h = (float *)malloc(sizeof(float)*N); b_h = (float *)malloc(sizeof(float)*N); // allocate arrays on device cudaMalloc((void **) &a_d, sizeof(float)*N); cudaMalloc((void **) &b_d, sizeof(float)*N); // initialize host data for (i=0; i<N; i++) { a_h[i] = 10.f+i; b_h[i] = 0.f; } // send data from host to device: a_h to a_d cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice); // copy data within device: a_d to b_d cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice); // retrieve data from device: b_d to b_h cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost); // check result for (i=0; i<N; i++) assert(a_h[i] == b_h[i]); // cleanup free(a_h); free(b_h); cudaFree(a_d); cudaFree(b_d); }

Cuando construyo obtengo estos errores:

1>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------ 1>Linking... 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaFree referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMemcpy referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMalloc referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaUnregisterFatBinary referenced in function __cudaUnregisterBinaryUtil 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaRegisterFatBinary referenced in function __sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main 1>D:/Stuff/Programming/Visual Studio 2008/Projects/CUDASandbox/x64/Debug/CUDASandbox.exe : fatal error LNK1120: 5 unresolved externals 1>Build log was saved at "file://d:/Stuff/Programming/Visual Studio 2008/Projects/CUDASandbox/CUDASandbox/x64/Debug/BuildLog.htm" 1>CUDASandbox - 6 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Puedo compilar y ejecutar los programas CUDA de ejemplo que vienen con el SDK. Sé que me falta algo simple aquí, pero ¿qué es?


Se necesitan dos cosas:

  1. Agregue la ruta de cuda:
    Vaya a: "Propiedades de configuración-> Enlazador-> General-> Directorios adicionales de la libreria" y agregue $(CudaToolkitLibDir) a la lista.

  2. Agregue la biblioteca cuda en tiempo real:
    Vaya: "Propiedades de la solución-> Enlazador-> Entrada-> Dependencias adicionales" y agregue cudart.lib a la lista.