2012-11-15 131 views
4

我想在64位Windows 7上使用Visual Studio 2010 Express在Windows上开始使用CUDA编程。它花了我一会儿设置环境,然后我写了第一个程序,helloWorld.cu :)CUDA Visual Studio 2010 Express构建错误

目前,我用下面的程序工作:

#include <stdio.h> 


__global__ void add(int a, int b, int *c){ 
    *c = a + b; 
} 

int main(void){ 
    int c; 
    int *dev_c; 
    HANDLE_ERROR(cudaMalloc((void**)&dev_c, sizeof(int))); 

    add<<<1,1>>>(2, 7, dev_c); 

    HANDLE_ERROR(cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost)); 

    printf("2 + 7 = %d\n", c); 
    cudaFree(dev_c); 

    return 0; 
} 

这里是构建的输出与Windows7.1SDK平台工具集:

1> C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "x64\Debug" -maxrregcount=0 --machine 64 --compile -g -Xcompiler "/EHsc /W1 /nologo /O2 /Zi /MD " -o "x64\Debug\hello.cu.obj" "C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2\hello.cu" 
1>nvcc : fatal error : '-ccbin': expected a number 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets(592,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "x64\Debug" -maxrregcount=0 --machine 64 --compile -g -Xcompiler "/EHsc /W1 /nologo /O2 /Zi /MD " -o "x64\Debug\hello.cu.obj" "C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2\hello.cu"" exited with code -1. 

然而,V100平台工具集,我收到此错误:

C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "x64\Debug" -maxrregcount=0 --machine 64 --compile -g -Xcompiler "/EHsc /W1 /nologo /O2 /Zi /MD " -o "x64\Debug\hello.cu.obj" "C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2\hello.cu" 
1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(455): error : dllexport/dllimport requires external linkage 
1>C:/Users/User/documents/visual studio 2010/Projects/CudaTest2/CudaTest2/hello.cu(12): error : identifier "HANDLE_ERROR" is undefined 
1>c:\program files\nvidia gpu computing toolkit\cuda\v5.0\include\math_functions.h(2900): error : function "hypotf" was referenced but not defined 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets(592,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "x64\Debug" -maxrregcount=0 --machine 64 --compile -g -Xcompiler "/EHsc /W1 /nologo /O2 /Zi /MD " -o "x64\Debug\hello.cu.obj" "C:\Users\User\documents\visual studio 2010\Projects\CudaTest2\CudaTest2\hello.cu"" exited with code 2. 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

任何人都可以点我在正确的方向?我几乎读过几乎所有关于相关问题的文章,几次安装和卸载工具,仍然无法获得正确的构建。

+0

你有没有尝试建设CUDA示例中的任何预定义项目(例如deviceQuery)?如果是这样,结果如何?你有没有在任何地方定义HANDLE_ERROR,或者编译器应该知道它是什么或在哪里找到它? –

回答

2

以下为我工作。编辑文件* C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ BuildCustomizations \ CUDA 5.0.prop * s。搜索PlatformToolset并为Windows7.1SDK添加条目。将该值设置为2010.

<CudaClVersion Condition="'$(PlatformToolset)' == 'Windows7.1SDK'">2010</CudaClVersion> 
+1

你能解释一下它到底做了什么吗?尝试编译Visual Studio Pro 2012中的cuda项目时出现同样的错误。 –

0

答案是双重的。您使用v100平台获得的HANDLE_ERROR构建错误与在书“Cuda By Example”的附加头文件中定义的HANDLE_ERROR函数有关 - 我认识到这个例子,所以我认为这是您要编译的代码。你没有包含这个文件,因为它没有列在书目代码清单中......这是来自作者(imho)的一个小疏忽。

您可以下载的代码示例,以及额外的标题“book.h”你从书页需要:https://developer.nvidia.com/content/cuda-example-introduction-general-purpose-gpu-programming-0

作为参考,这是从book.h在handle_error代码:

static void HandleError(cudaError_t err, 
        const char *file, 
        int line) { 
if (err != cudaSuccess) { 
    printf("%s in %s at line %d\n", cudaGetErrorString(err), 
      file, line); 
    exit(EXIT_FAILURE); 
    } 
} 
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__)) 
0

这是因为visual studio没有权限访问Temp文件夹。

导航到C:\ Users \用户名\ AppData \本地的\ Temp和改变当前用户的访问安全规则(在这种情况下,用户名),以完全控制