CUDA-特定类型

备注

本页是关于特定于CUDA目标的类型。CUDA目标中还有许多其他类型可用 - 请参阅 内置类型

向量类型

CUDA 向量类型 可以在内核中使用。与 CUDA C/C++ 中的向量类型有两个重要区别:

首先,Numba CUDA 中推荐的向量类型名称格式为 <base_type>x<N>,其中 base_type 是向量的基础类型,N 是向量中的元素数量。例如 int64x3uint16x4float32x4 等。对于新的 Numba CUDA 内核,这是实例化向量类型的推荐方式。

为了方便,用户在将现有的CUDA C/C++内核适配到Python时,可以使用与C/C++命名一致的别名。例如,float3 别名为 float32x3long3 别名为 int32x3``int64x3``(取决于平台),等等。

其次,与使用工厂函数的 CUDA C/C++ 不同,向量类型直接通过其构造函数构造。例如,要构造一个 float32x3

from numba.cuda import float32x3

# In kernel
f3 = float32x3(0.0, -1.0, 1.0)

此外,只要组件总数与结果向量类型匹配,向量类型可以从向量和基本类型的组合中构造。例如,以下所有构造都是有效的:

zero = uint32(0)
u2 = uint32x2(1, 2)
# Construct a 3-component vector with primitive type and a 2-component vector
u3 = uint32x3(zero, u2)
# Construct a 4-component vector with 2 2-component vectors
u4 = uint32x4(u2, u2)

向量类型的第1、2、3和4个分量可以通过字段 xyzw 分别访问。在当前版本的Numba中,这些分量在构造后是不可变的;预计在未来的版本中将添加对修改向量分量的支持。

v1 = float32x2(1.0, 1.0)
v2 = float32x2(1.0, -1.0)
dotprod = v1.x * v2.x + v1.y * v2.y