CUDA erreur de couplage - Visual Express 2008 - nvcc fatale due à (null) fichier de configuration
J'ai cherché longuement une solution possible à mon erreur pour les 2 dernières semaines. J'ai installé avec succès le Cuda compilateur 64 bits (outils) et le SDK ainsi que la version 64 bits de Visual Studio Express 2008 et Windows 7 SDK avec le Framework 3.5. Je suis sous windows XP 64 bits. J'ai confirmé que la VSE est en mesure de compiler en 64 bits que j'ai toutes les 64-bit options qui s'offrent à moi en utilisant les étapes sur le site web suivant: (depuis Visual Express ne comportent 64 bits des packages)
http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/
Le registre des mises à jour pour la version 64 bits, l'installation dans un commentaire utilisateur sur la même page que le lien ci-dessus.
J'ai confirmé la version 64 bits de compiler capacité puisque le "x64" est disponible à partir du menu déroulant sous "Outils->Options->Répertoires de VC++" et de compiler en 64 bits n'est pas l'intégralité du projet "sauté". J'ai inclus tous les répertoires voulus pour 64-bit cuda outils, 64 SDK et Visual Express (\VC\bin\amd64).
Voici le message d'erreur que je reçois lorsque essayant de compiler 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 ==========
Voici le code simple je suis en train de compiler/exécuter en 64 bits:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <cuda.h>
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;
}
OriginalL'auteur Josh | 2010-06-03
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème en
appel "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
Note: j'ai fait cela parce que:
Quand j'ai lu cela, j'ai été comme "oui, bon, d'un autre mec jaillissant hors BS parce qu'il sonne bien". L'ajout d'un .le fichier bat, l'appel d'une cryptique de commande, j'ai été en attente pour le virus apparaissent. Pourtant, étonnamment, CELA a FONCTIONNÉ! 0 échecs de compilation! TY amitabh!
Excellente solution!
OriginalL'auteur Amitabh Mritunjai
Mise à JOUR 06/04/2010:
Ok, j'ai trouvé la solution au problème. Le code est très bien. Après avoir suivi les étapes à partir de l'original lien ci-dessus et en ajoutant au besoin de la clé de registre assurez-vous que Windows SDK est de viser la bonne version (7.0) par le lancement du SDK Windows Outil de Configuration depuis le menu démarrer, choisissez la bonne version (v7.0), et cliquez sur "Prendre".
Assurez-vous d'inclure les répertoires suivants pour x64 compilation (sous la rubrique "Outils>Options->les Projets Et les Solutions->Répertoires de VC++):
C:\CUDA\bin64
C:\CUDA\lib64
C:\CUDA\include
C:\Program Files (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 "codée en dur" répertoire pour la version 64 bits compilateurs Visual Express 2008. Pour faire le point, de copier le fichier nécessaire "vcvars64.chauve-souris" et le renommer en "vcvarsamd64.chauve-souris", comme suit:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.chauve-souris
à
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.chauve-souris
Sur le changement, le programme compilé et exécuté avec succès.
J'ai lu "autres" offres sur le web pour d'autres solutions à l'erreur: "nvcc fatale: Visual Studio fichier de configuration '(null)'", mais très peu ont spécifié ci-dessus comme une exigence pour obtenir nvcc pour trouver le nécessaire visual studio fichier de configuration.
Avertissement: j'ai installé une machine propre et en OS.
J'espère que cela aide les autres avec des problèmes similaires.
OriginalL'auteur Josh
Même message d'erreur, mais d'autre solution encore une fois. J'ai essayé de compiler en 32 bits CUDA libs sur une machine 64bits.
J'ai dû ajouter
--machine 32
argumentnvcc
appel, comme suggéré par Imperian dans un commentaire, ici : Erreur de compilation CUDA à partir de l'Invite de Commandeen espérons que cela aide quelqu'un
OriginalL'auteur azf
J'ai trouvé que j'ai aussi dû changer le CUDA_PATH et CUDA_LIB_PATH variables d'environnement, parce qu'ils ont été pointant vers le x86 de la chaîne (que j'avais installé après l'x64 outils).
Après quelques tourner en rond avec quelques erreurs d'édition de liens, j'ai réussi à construire un x64 CUDA application!
OriginalL'auteur Artfunkel