Tôi đã tìm kiếm rộng rãi một giải pháp có thể cho lỗi của tôi trong 2 tuần qua. Tôi đã cài đặt thành công trình biên dịch (công cụ) và SDK Cuda 64 bit cũng như phiên bản 64-bit của Visual Studio Express 2008 và Windows 7 SDK với Framework 3.5. Tôi đang sử dụng Windows XP 64-bit. Tôi đã xác nhận rằng VSE có thể biên dịch trong 64-bit như tôi có tất cả các tùy chọn 64-bit có sẵn cho tôi bằng cách sử dụng các bước trên trang web sau: (kể từ khi Visual Express không bao gồm các gói 64 bit)Lỗi liên kết CUDA - Visual Express 2008 - nvcc gây tử vong do (null) tệp cấu hình
http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/
Cập nhật đăng ký để cài đặt 64 bit được tìm thấy trong nhận xét của người dùng trên cùng một trang như liên kết ở trên.
Tôi đã xác nhận khả năng biên dịch 64 bit vì "x64" có sẵn từ trình đơn kéo xuống trong "Tools-> Options-> VC++ Directories" và biên dịch trong 64 bit không dẫn đến toàn bộ dự án bị "bỏ qua". Tôi đã bao gồm tất cả các thư mục cần thiết cho các công cụ cuda 64 bit, 64 SDK và Visual Express (\ VC \ bin \ amd64).
Dưới đây là thông báo lỗi tôi nhận được khi cố gắng biên soạn trong 64-bit:
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 ==========
Dưới đây là mã đơn giản, tôi đang cố gắng để biên dịch/chạy trong 64-bit:
#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;
}
Gợi ý bạn thêm câu trả lời của bạn như là một câu trả lời chính thức để câu hỏi này không xuất hiện trong danh sách "chưa được trả lời". Biên dịch với Express Edition trong 64 bit luôn là vấn đề, cảm ơn bạn đã chia sẻ điều này. – Tom