CUDA Visual Studio 2010 Express 构建错误

4
我希望能够使用64位Windows 7上的Visual Studio 2010 Express开始CUDA编程。我花费了一些时间来设置环境,刚刚写了我的第一个程序:helloWorld.cu :)
目前我正在使用以下程序:
#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 ==========

请问有人能指导我吗?我已经阅读了几乎所有相关问题的帖子,安装和卸载了多次工具,但仍然无法得到正确的构建。


你尝试过在CUDA示例中构建任何预定义的项目(例如deviceQuery)吗?如果是,结果如何?你是否定义了HANDLE_ERROR,或者编译器应该如何知道它是什么或在哪里找到它? - Robert Crovella
3个回答

2
以下方法对我有效。编辑文件*C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.prop*,查找PlatformToolset并添加一个Windows7.1SDK的条目。将值设置为2010。
<CudaClVersion Condition="'$(PlatformToolset)' == 'Windows7.1SDK'">2010</CudaClVersion>

1
你能解释一下它具体是做什么的吗?我在尝试在Visual Studio Pro 2012中编译一个cuda项目时遇到了相同的错误。 - Jan M.

0
答案是双重的。您在使用v100平台时遇到的HANDLE_ERROR构建错误与函数被定义在书籍“Cuda By Example”的附加标头中有关-我认识这个例子,因此我认为这是您正在尝试编译的代码。 您没有包含此文件,因为它未列在书籍代码清单中... 在我看来,这是作者的小疏忽。
您可以从书籍页面下载示例代码和您需要的其他标头“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\userName\AppData\Local\Temp 并将当前用户(在本例中为 userName)的访问安全规则更改为完全控制


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接