2012-10-11 88 views
4

我需要使用nvcc从命令行编译cuda .cu文件。该文件是“vectorAdd_kernel.cu”,包含下面的一段代码:从命令行运行nvcc时出现问题

extern "C" __global__ void VecAdd_kernel(const float* A, const float* B, float* C, int N) 
{ 
    int i = blockDim.x * blockIdx.x + threadIdx.x; 
    if (i < N) 
     C[i] = A[i] + B[i]; 
} 

我用下面的命令(我需要一个.cubin文件):

nvcc --cubin --use-local-env --cl-version 2010 -keep -I "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include" vectorAdd_kernel.cu 

编译器创建的文件vectorAdd_kernel.cpp4.ii和vectorAdd_kernel.cpp1.ii然后停止与以下的输出:

C:\Users\Massimo\Desktop\Pluto>nvcc --cubin --use-local-env --cl-version 2010 vectorAdd_kernel.cu -keep -I "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include" 

vectorAdd_kernel.cu 

vectorAdd_kernel.cu 

c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(29): error: invalid redeclaration of type name "size_t" 

C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include\new(51): error: first parameter of allocation function must be of type "size_t" 

C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include\new(55): error: first parameter of allocation function must be of type "size_t" 

能否请你帮我解决这个问题?

干杯,

马西莫

+3

是在.CU文件还有什么?为什么你需要''我的VC /包含路径?为什么你需要'--use-local-env'和'--cl-version'? – harrism

回答

2

我有类似的问题。

其中SourceAnnotations.h生成中断代码:

#ifdef _WIN64 
typedef unsigned __int64 size_t; 
#else 
typedef _W64 unsigned int size_t; 
#endif 

我添加_WIN64编译符号与此--compiler-options "-D _WIN64"。我的NVCC编译字符串是这样的:

nvcc kernel.cu --cubin --compiler-options "-D _WIN64" 
+1

您能否详细说明问题的原因,或者该解决方案如何解决问题? –

1

我正好遇到这个在Visual Studio 2017年和CUDA 9.0试图从命令行编译nvcc。经过漫长的会议后,我意识到我的Visual Studio命令行工具已设置为使用x86导演的cl.exe而不是x64。有许多方法来解决这个问题,一个方法是重写它的外观目录的编译器工具, - 例如在:

nvcc -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\bin\HostX86\x64" -o add_cuda add_cuda.cu 

然后,它工作得很好。

我还会提到,我使用git工具中的which.exe实用程序来确定它正在访问的cl.exe的版本,但where命令(原生windows)也适用。

更新:

另一种方式 - 可能是一个更好的方式 - 来处理这只是正确设置Visual Studio环境变量到64位这样的企业版:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 

对于社区版替代“社区”作为“企业”的道路。

您还可以选择带有(例如)--vcvars_ver=14.0的工具集,该工具集选择使用Visual Studio 15.5版编译CUDA 9.1所需的14.0工具集。

然后你可以用这个简单的构建:

nvcc -o add_cuda add_cuda.cu