Error de enlace CUDA – Visual Express 2008 – nvcc fatal debido a un archivo de configuración (nulo)

He estado buscando exhaustivamente una posible solución a mi error durante las últimas 2 semanas. He instalado con éxito el comstackdor de Cuda de 64 bits (herramientas) y SDK, así como la versión de 64 bits de Visual Studio Express 2008 y Windows 7 SDK con Framework 3.5. Estoy usando Windows XP de 64 bits. He confirmado que VSE puede comstackr en 64 bits ya que tengo todas las opciones de 64 bits disponibles para mí usando los pasos en el siguiente sitio web: (ya que Visual Express no incluye inherentemente los paquetes de 64 bits)

http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/

Las actualizaciones de registro para la instalación de 64 bits se encuentran en un comentario del usuario en la misma página que el enlace anterior.

He confirmado la capacidad de comstackción de 64 bits ya que “x64” está disponible en el menú desplegable en “Herramientas-> Opciones-> Directorios de VC ++” y comstackr en 64 bits no da como resultado que se “omita” todo el proyecto. . He incluido todos los directorios necesarios para las herramientas de cuda de 64 bits, 64 SDK y Visual Express (\ VC \ bin \ amd64).

Aquí está el mensaje de error que recibo cuando bash comstackr en 64 bits:

1>------ Build started: Project: New, Configuration: Release x64 ------ 1>Compiling with CUDA Build Rule... 1>"C:\CUDA\bin64\nvcc.exe" -arch sm_10 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -maxrregcount=32 --compile -o "x64\Release\template.cu.obj" "c:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\src\CUDA_Walkthrough_DeviceKernels\template.cu" 1>nvcc fatal : Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/../..' 1>Linking... 1>LINK : fatal error LNK1181: cannot open input file '.\x64\Release\template.cu.obj' 1>Build log was saved at "file://c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\New\New\x64\Release\BuildLog.htm" 1>New - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Aquí está el código simple que estoy tratando de comstackr / ejecutar en 64 bits:

 #include  #include  #include  #include  #include  void mypause () { printf ( "Press [Enter] to continue . . ." ); fflush ( stdout ); getchar(); } __global__ void VecAdd1_Kernel(float* A, float* B, float* C, int N) { int i = blockDim.x*blockIdx.x+threadIdx.x; if (i<N) C[i] = A[i] + B[i]; //result should be a 16x1 array of 250s } __global__ void VecAdd2_Kernel(float* B, float* C, int N) { int i = blockDim.x*blockIdx.x+threadIdx.x; if (i<N) C[i] = C[i] + B[i]; //result should be a 16x1 array of 400s } int main() { int N = 16; float A[16];float B[16]; size_t size = N*sizeof(float); for(int i=0; i<N; i++) { A[i] = 100.0; B[i] = 150.0; } // Allocate input vectors h_A and h_B in host memory float* h_A = (float*)malloc(size); float* h_B = (float*)malloc(size); float* h_C = (float*)malloc(size); //Initialize Input Vectors memset(h_A,0,size);memset(h_B,0,size); h_A = A;h_B = B; printf("SUM = %f\n",A[1]+B[1]); //simple check for initialization //Allocate vectors in device memory float* d_A; cudaMalloc((void**)&d_A,size); float* d_B; cudaMalloc((void**)&d_B,size); float* d_C; cudaMalloc((void**)&d_C,size); //Copy vectors from host memory to device memory cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice); cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice); //Invoke kernel int threadsPerBlock = 256; int blocksPerGrid = (N+threadsPerBlock-1)/threadsPerBlock; VecAdd1(blocksPerGrid, threadsPerBlock,d_A,d_B,d_C,N); VecAdd2(blocksPerGrid, threadsPerBlock,d_B,d_C,N); //Copy results from device memory to host memory //h_C contains the result in host memory cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost); for(int i=0; i<N; i++) //output result from the kernel "VecAdd" { printf("%f ", h_C[i] ); printf("\n"); } printf("\n"); cudaFree(d_A); cudaFree(d_B); cudaFree(d_C); free(h_A); free(h_B); free(h_C); mypause(); return 0; } 

Resolví el problema

  1. instalar Windows SDK (no olvides elegir todas las opciones de x64 para sistemas operativos de 64 bits)
  2. incluye “c: \ Archivos de progtwig (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” en RUTA
  3. crear el archivo vcvars64.bat dentro del directorio “c: \ Archivos de progtwig (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” con el siguiente contenido: llamar a “C: \ Archivos de progtwig \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ SetEnv.cmd “/ x64

Nota: Hice esto porque:

  1. Estoy usando VC ++ Express 2010
  2. No tengo “vcvars64.bat” en ningún directorio ??

ACTUALIZACIÓN 06/04/2010:

Ok, encontré la solución al problema. El código está bien. Después de seguir los pasos del enlace original anterior y agregar la clave de registro necesaria, asegúrese de que Windows SDK esté apuntando a la versión correcta (7.0) iniciando la Herramienta de configuración SDK de Windows desde el menú de inicio, elija la versión correcta (v7.0), y haz clic en “Hacer actual”.

Asegúrese de incluir los siguientes directorios para la comstackción x64 (en “Herramientas-> Opciones-> Proyectos y soluciones-> Directorios de VC ++): C: \ CUDA \ bin64 C: \ CUDA \ lib64 C: \ CUDA \ include C: \ Program Archivos (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64

Ahora hay otra cosa que cambiar para un sistema de 64 bits. Aparentemente, el comstackdor de cuda tiene un directorio “codificado” para comstackdores de 64 bits en Visual Express 2008. Para realizar la corrección, copie el archivo “vcvars64.bat” necesario y cámbiele el nombre a “vcvarsamd64.bat” de la siguiente manera:

C: \ Archivos de progtwig (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ vcvars64.bat

a

C: \ Archivos de progtwig (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64 \ vcvarsamd64.bat

Tras el cambio, el progtwig comstackdo y se ejecutó con éxito.

He leído ‘otras’ publicaciones en toda la web para encontrar otras soluciones al error: “nvcc fatal: archivo de configuración de Visual Studio ‘(nulo)'”, pero muy pocos han especificado lo anterior como requisito para obtener nvcc para encontrar el archivo de configuración de estudio visual necesario.

Descargo de responsabilidad: instalé en una máquina limpia y sistema operativo.

Espero que esto ayude a otros con problemas similares.

El mismo mensaje de error, pero una solución diferente una vez más. Intentaba comstackr libs CUDA de 32 bits en una máquina de 64 bits. Tuve que agregar nvcc --machine 32 argument to nvcc call, como sugiere Imperian en un comentario, aquí: Error al comstackr CUDA desde el símbolo del sistema

con la esperanza de que esto ayude a alguien

Descubrí que también tenía que cambiar las variables de entorno CUDA_PATH y CUDA_LIB_PATH porque apuntaban a la cadena de herramientas x86 (que había instalado después de las herramientas x64).

Después de algunos problemas con algunos errores del enlazador, ¡logré construir una aplicación CUDA x64!