Erreur de liaison CUDA – Visual Express 2008 – irrécupérable nvcc en raison d’un fichier de configuration (null)

Je cherche longuement une solution possible à mon erreur depuis deux semaines. J’ai installé avec succès le compilateur Cuda 64 bits (outils) et le SDK, ainsi que la version 64 bits de Visual Studio Express 2008 et le SDK Windows 7 avec Framework 3.5. J’utilise Windows XP 64 bits. J’ai confirmé que VSE est en mesure de comstackr en 64 bits, car toutes les options 64 bits sont disponibles selon les étapes décrites sur le site Web suivant: (étant donné que Visual Express n’inclut pas les packages 64 bits de manière inhérente)

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

Les mises à jour du registre pour l’installation 64 bits se trouvent dans un commentaire d’utilisateur sur la même page que le lien ci-dessus.

J’ai confirmé la capacité de compilation 64 bits car le “x64” est disponible dans le menu déroulant sous “Outils-> Options-> Répertoires VC ++” et la compilation en 64 bits n’entraîne pas le “saut” du projet entier. . J’ai inclus tous les répertoires nécessaires pour les outils cuda 64 bits, le SDK 64 et Visual Express (\ VC \ bin \ amd64).

Voici le message d’erreur que je reçois lors d’une tentative de compilation 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" -Xcomstackr "/EHsc /W3 /nologo /O2 /Zi /MT " -maxrregcount=32 --comstack -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 ========== 

Voici le code simple que j’essaie de comstackr / exécuter 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; } 

J’ai résolu le problème en

  1. installation de Windows SDK (n’oubliez pas de choisir toutes les options x64 pour les systèmes d’exploitation 64 bits)
  2. inclure “c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” dans PATH
  3. créer le fichier vcvars64.bat dans le répertoire “c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” avec le contenu suivant: appelez “C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 \ Bin \ SetEnv.cmd “/ x64

Note: j’ai fait ça parce que:

  1. J’utilise VC ++ Express 2010
  2. Je n’ai pas “vcvars64.bat” dans aucun répertoire?

MISE À JOUR 06/04/2010:

Ok, j’ai trouvé la solution au problème. Le code est bon. Après avoir suivi les étapes du lien d’origine ci-dessus et ajouté la clé de registre nécessaire, assurez-vous que Windows SDK cible la version correcte (7.0) en lançant l’outil de configuration de Windows SDK à partir du menu Démarrer, choisissez la bonne version (v7.0), et cliquez sur “Make Current”.

Assurez-vous d’inclure les répertoires suivants pour la compilation x64 (sous “Outils-> Options-> Projets et solutions-> Répertoires VC ++): C: \ CUDA \ bin64 C: \ CUDA \ lib64 C: \ CUDA \ include C: \ Program Fichiers (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64

Maintenant, il y a une autre chose à changer pour un système 64 bits. Apparemment, le compilateur cuda a un répertoire “codé en dur” pour les compilateurs 64 bits sous Visual Express 2008. Pour résoudre le problème, copiez le fichier requirejs “vcvars64.bat” et renommez-le “vcvarsamd64.bat” comme suit:

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

à

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

Lors de la modification, le programme a été compilé et exécuté avec succès.

J’ai lu ‘autres’ articles sur le Web à la recherche d’autres solutions à l’erreur: “nvcc fatal: fichier de configuration Visual Studio ‘(null)'”, mais très peu ont spécifié ce qui précède comme condition requirejse pour obtenir nvcc afin de trouver le fichier de configuration nécessaire de visual studio.

Disclaimer: J’ai installé sur une machine propre et un système d’exploitation.

Espérons que cela aide les autres avec des problèmes similaires.

Même message d’erreur, mais solution différente encore. J’essayais de comstackr des bibliothèques CUDA 32 bits sur une machine 64 bits. J’ai dû append l’argument nvcc --machine 32 à l’appel nvcc , comme suggéré par Imperian dans un commentaire, ici: Erreur lors de la compilation de CUDA à partir d’une invite de commande

en espérant que cela aide quelqu’un

J’ai constaté que je devais également modifier les variables d’environnement CUDA_PATH et CUDA_LIB_PATH, car elles pointaient vers la chaîne d’outils x86 (que j’avais installée après les outils x64).

Après quelques erreurs avec l’éditeur de liens, j’ai réussi à construire une application CUDA x64!