如何使用带有设备链接的cuda在Visual Studio中进行编译?

时间:2019-09-29 13:33:52

标签: c++ visual-studio cuda

我正在尝试使用设备链接通过Visual Studio 2019编译cuda代码。 (-dc编译器选项)。对于项目功能,我既需要nvcc生成的代码,也需要我项目中其他文件的g++生成的代码。因此nvcc编译cuda文件,g++编译c ++文件。

我想创建一个可从CPU和GPU都访问的Vector3类,因此我使用__device__ __host__函数声明器在文件Vector3.h中声明了我的方法。

但是我在链接器上遇到了一些麻烦。我收到错误消息:Vector3.cu.obj : error LNK2001: unresolved external symbol __cudaRegisterLinkedBinary_42_tmpxft_00001b9c_00000000_7_Vector3_cpp1_ii_b7c8c887

我用于类声明的文件Vector3.h看起来像这样:

#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

namespace engine {
    class Vector3;
}

class engine::Vector3
{
public:
    __device__ __host__ Vector3();
    __device__ __host__ Vector3(double const& x, double const& y, double const& z);

    __device__ __host__ double get_x() const;
    __device__ __host__ double get_y() const;
    __device__ __host__ double get_z() const;

    __device__ __host__ double get_magnitude() const;

    ptree get_client_data() const;

    __device__ __host__ void set(double const& x, double const& y, double const& z);

    __device__ __host__ void set_x(double const& x);
    __device__ __host__ void set_y(double const& y);
    __device__ __host__ void set_z(double const& z);

    __device__ __host__ Vector3 get_normalized() const;

    __device__ __host__ void rotate_x(double const& angle);
    __device__ __host__ void rotate_y(double const& angle);
    __device__ __host__ void rotate_z(double const& angle);

    __device__ __host__ Vector3 operator+(Vector3 const& v) const;
    __device__ __host__ Vector3 operator*(double const& v) const;

    __device__ __host__ void operator+=(Vector3 const& v);
    __device__ __host__ void operator*=(double const& v);

    __device__ __host__ double dot(Vector3 const& v) const;

protected:
    double x_, y_, z_;
};

Cuda编译器命令行:

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\HostX86\x64" -x cu  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include"      --keep-dir x64\Release -maxrregcount=0  --machine 64 --compile -cudart shared      -Xcompiler "/EHsc  /nologo    /Zi  /MD " -o x64\Release\%(Filename)%(Extension).obj "%(FullPath)" -dc  -Xcompiler "/FS" 

Cuda链接器命令行:

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe" -dlink -o x64\Release\Polynom.device-link.obj -Xcompiler "/EHsc  /nologo  /Zi   " -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64" cudart.lib

0 个答案:

没有答案