从命令行运行nvcc时出现问题

时间:2012-10-11 16:03:30

标签: visual-c++ cuda nvcc

我需要从命令行使用nvcc编译cuda .cu文件。该文件是“vectorAdd_kernel.cu”并包含以下代码:

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"

请帮助我解决这个问题?

干杯,

的Massimo

3 个答案:

答案 0 :(得分:3)

我刚刚在Visual Studio 2017和Cuda v9.0中尝试使用cl.exe从命令行进行编译。经过漫长的会话后,我意识到我的Visual Studio命令行工具已设置为使用x86导演中的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 。有许多方法可以解决它,一种方法是覆盖它查找其编译器工具的目录 - 例如:在

which.exe

然后工作正常。

我还要提到我使用git工具中的cl.exe实用程序来确定它正在访问的where版本,但是"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 命令 - 原生于窗户 - 也可以。

更新

处理此问题的另一种方法 - 可能是更好的方法 - 只需将Visual Studio环境变量正确设置为64位,就像企业版一样:

--vcvars_ver=14.0

社区版替代&#34;社区&#34;为&#34;企业&#34;在路上。

您也可以选择工具集(例如)nvcc -o add_cuda add_cuda.cu 选择14.0工具集,这是使用15.5版本的Visual Studio编译CUDA 9.1所必需的。

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

Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);

答案 1 :(得分: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"

答案 2 :(得分:-1)

VS Community 2019:

打开VS 2019的 x64本机工具命令提示符

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.3.6
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cd c:\Users\AFP\Downloads\cuda_by_example\chapter03

c:\Users\AFP\Downloads\cuda_by_example\chapter03>nvcc hello_world.cu
hello_world.cu
   Creating library a.lib and object a.exp

c:\Users\AFP\Downloads\cuda_by_example\chapter03>

如果未为x64初始化环境,并且您已打开VS 2019的 x86本机工具命令提示符,请运行:

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.3.6
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cd c:\Users\AFP\Downloads\cuda_by_example\chapter03

c:\Users\AFP\Downloads\cuda_by_example\chapter03>nvcc hello_world.cu
hello_world.cu

YOU GET LOT OF ERRORS ....

75 errors detected in the compilation of "C:/Users/AFP/AppData/Local/Temp/tmpxft_00004504_00000000-12_hello_world.cpp1.ii".

c:\Users\AFP\Downloads\cuda_by_example\chapter03>"c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.3.6
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

c:\Users\AFP\Downloads\cuda_by_example\chapter03>nvcc hello_world.cu
hello_world.cu
   Creating library a.lib and object a.exp

c:\Users\AFP\Downloads\cuda_by_example\chapter03>