gpt4 book ai didi

c++ - CUDA - 源文件上的 __device__ 方法

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:01 25 4
gpt4 key购买 nike

我有一个在主机和设备代码上都使用的类,以便更轻松地传递数据。这个类有一些操作数据的方法。一个简单的例子是:

struct Vector {
float x, y, z;
__host__ __device__ Vector(float _x, float _y, float _z) {
//...
}
};

如果我在头文件上实现这个类,它工作正常并且 nvcc 很高兴。但是,如果我尝试在源文件上实现构造函数,nvcc 会提示构造函数是非内联的。有没有办法绕过这个或者这只是编译器的限制?

最佳答案

在 CUDA 5.0 之前,CUDA 编译器有一个限制,即内核所需的所有内容(即 __global__ 函数)必须在一个翻译单元中。对于费米之前的设备(即计算能力 1.x),编译器还必须内联所有 __device__功能。因此,如果您在文件 a.cu 和 __global__ 中定义了结构使用 b.cu 中定义的结构的内核,那么当编译器处理 b.cu 时,它将无法找到 __device__功能。

使用 CUDA 5.0,您可以分别编译这两个文件并将它们链接在一起。这仍然需要 Fermi 或更高版本(2.x 或更高版本)。

关于c++ - CUDA - 源文件上的 __device__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586700/

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