CUDA ligando erro – Visual Express 2008 – nvcc fatal devido ao arquivo de configuração (nulo)

Eu estive procurando extensivamente por uma possível solução para o meu erro nas últimas duas semanas. Instalei com êxito o compilador Cuda de 64 bits (ferramentas) e o SDK, bem como a versão de 64 bits do Visual Studio Express 2008 e do Windows 7 SDK com o Framework 3.5. Estou usando o Windows XP de 64 bits. Confirmei que o VSE é capaz de compilar em 64 bits, pois tenho todas as opções de 64 bits disponíveis para mim usando as etapas no seguinte site: (uma vez que o Visual Express não inclui inerentemente os pacotes de 64 bits)

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

As atualizações do registro para a instalação de 64 bits são encontradas em um comentário do usuário na mesma página do link acima.

Confirmei a capacidade de compilation de 64 bits, pois o “x64” está disponível no menu suspenso em “Ferramentas-> Opções-> Diretórios VC ++” e a compilation em 64 bits não faz com que todo o projeto seja “ignorado” . Incluí todos os diretórios necessários para as ferramentas cuda de 64 bits, 64 SDK e Visual Express (\ VC \ bin \ amd64).

Aqui está a mensagem de erro que recebo ao tentar compilar em 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 ========== 

Aqui está o código simples que estou tentando compilar / executar em 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; } 

Eu resolvi o problema

  1. instalar o Windows SDK (não se esqueça de escolher todas as opções x64 para o sistema operacional de 64 bits)
  2. inclua “c: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” no PATH
  3. crie o arquivo vcvars64.bat dentro do diretório “c: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” com o seguinte conteúdo: chame “C: \ Arquivos de Programas \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ SetEnv.cmd “/ x64

Nota: Eu fiz isso porque:

  1. Estou usando o VC ++ Express 2010
  2. Eu não tenho “vcvars64.bat” em qualquer diretório?

ATUALIZAÇÃO 06/04/2010:

Ok, eu encontrei a solução para o problema. O código está bem. Depois de seguir as etapas do link original acima e adicionar a chave de registro necessária, verifique se o Windows SDK está direcionando a versão correta (7.0) iniciando a ferramenta de configuração do SDK do Windows no menu Iniciar, escolha a versão correta (v7.0), e clique em “Tornar atual”.

Certifique-se de include os diretórios a seguir para a compilation x64 (em “Ferramentas-> Opções-> Projetos e soluções-> Diretórios VC ++): C: \ CUDA \ bin64 C: \ CUDA \ lib64 C: \ CUDA \ include C: \ Program Arquivos (x 86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64

Agora há mais uma coisa a ser alterada em um sistema de 64 bits. Aparentemente, o compilador cuda possui um diretório “codificado” para compiladores de 64 bits no Visual Express 2008. Para fazer a correção, copie o arquivo necessário “vcvars64.bat” e renomeie-o para “vcvarsamd64.bat” da seguinte forma:

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

para

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

Após a mudança, o programa compilado e executado com sucesso.

Eu li ‘outros’ postagens em toda a web para outras soluções para o erro: “nvcc fatal: arquivo de configuração do Visual Studio ‘(null)'”, mas muito poucos especificaram o acima como um requisito para obter nvcc para encontrar o arquivo de configuração necessário do visual studio.

Disclaimer: Eu instalei em uma máquina limpa e sistema operacional.

Espero que isso ajude outras pessoas com problemas semelhantes.

Mesma mensagem de erro, mas solução diferente mais uma vez. Eu estava tentando compilar 32 bits CUDA libs em uma máquina de 64bits. Eu tive que adicionar o argumento nvcc --machine 32 à chamada nvcc , como sugerido por Imperian em um comentário, aqui: Erro ao compilar CUDA a partir do prompt de comando

na esperança isso ajuda alguém

Descobri que eu também tinha que alterar as variables ​​de ambiente CUDA_PATH e CUDA_LIB_PATH, porque elas estavam apontando para a toolchain x86 (que eu tinha instalado depois das ferramentas x64).

Depois de alguns problemas com alguns erros de linker, eu consegui construir um aplicativo x64 CUDA!