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;
}
Vous suggérons d'ajouter votre réponse comme une réponse officielle, de sorte que cette question ne figure pas dans la "réponse" de la liste. Compilation avec Express Edition 64-bit est toujours problématique, merci pour ce partage.

OriginalL'auteur Josh | 2010-06-03