CUDA __device__类型的结构体

5
CUDA专家们,如果我在主机代码中定义了一个新类型:
struct float_3{
 float x;
 float y;
 float z;
};

如果我已经将一些这种类型的数据传输到设备上,那么我能否创建该新类型的__device__调用,即:

__device__ float_3 foo(float_3 r,float b,int a){
}

我们能创建任何类型的__device__吗?还是只能是intfloatdoublevoid等等? 而且,我们能返回一个指向__device__的指针吗?例如:__device__ float_3* foo(){}
2个回答

9

是的,你可以创建任何类型的 __device__。它只是一个限定符,使得该函数能够在设备上运行并且可以从设备调用。

顺便说一下,CUDA 有一个 float3 类型。我从未使用过它,但如果我记得正确,它提供了与你的 float_3 相同的功能,并带有构造函数。


5
CUDA 的 float3 类型还具有正确的对齐声明,这是另一个优点。 - harrism

2
可以创建任何类型的 __device__ 吗?
简短的回答是可以。长的回答是,如果它是像你的 float_3 这样的用户定义类型,你可以定义一个 __device__ 变量指针,并使用 cudaMalloc 在设备上分配内存。
能否返回设备上的指针?
是的,你可以这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接