gpt4 book ai didi

c++ - CUDA无法将类拆分为 header 和实现

转载 作者:行者123 更新时间:2023-12-02 11:08:55 25 4
gpt4 key购买 nike

我有下一个文件

内核

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <cuda.h>
#include <device_launch_parameters.h>
#include <texture_fetch_functions.h>
#include <builtin_types.h>
#include <vector_functions.h>
#include <float.h>
#include "Book.cuh"

extern "C" __global__ void Custom2(double *data, double *c)
{

int i = threadIdx.x;
Book *book=new Book(data);
}

Book.cuh:
#pragma once
#include "cuda_runtime.h"
class Book
{
private:

public:

__device__ Book::Book(double *data)
{
}

__device__ double* Book::operator[] (const int index)
{
return nullptr;
}

};

这些文件编译没有任何问题。
但是现在我想将声明和实现分为两个文件.cu和.cuh

因此,我将拥有两个文件,而不是Book.cuh文件

Book.cuh
#pragma once
#include "cuda_runtime.h"
class Book
{
public:
__device__ Book(double *data);
__device__ double* operator[] (const int index);
};

书库
#pragma once
#include "Book.cuh"
__device__ Book::Book(double *data)
{
}

__device__ double* Book::operator[] (const int index)
{
return nullptr;
}

现在我的项目无法编译

这是错误
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\CUDA 8.0.targets(689,9): error MSB3721: The command ""D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\bin\nvcc.exe" -gencode=arch=compute_20,code=sm_20 --use-local-env --cl-version 2015 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64"  -I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\include" -I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 -cubin -cudart static  -o X:\Projects\CudaTest\CudaTest\\kernel.ptx "X:\Projects\CudaTest\Cuda\kernel.cu"" exited with code 255.

Cuda编译器设置

NVCC编译类型:生成.cubin文件(-cubin)

我的环境:

Windows 10 x64

CUDA 8.0

显卡:Geforce GTX 660M

我是C#开发人员,以前没有C++或Cuda的经验,我不确定这是Cuda特有的问题,还是我对C++的了解几乎为零。我的问题可能很容易解决,但是我已经花了几个小时没有任何进展。

最佳答案

这个问题是特定于CUDA的。
简而言之,将“生成可重定位设备”代码设置为-是(-rdc = true)

这是一个很长的答案:
https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/

关于c++ - CUDA无法将类拆分为 header 和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com