CUDA-特定类型
备注
本页是关于特定于CUDA目标的类型。CUDA目标中还有许多其他类型可用 - 请参阅 内置类型。
向量类型
CUDA 向量类型 可以在内核中使用。与 CUDA C/C++ 中的向量类型有两个重要区别:
首先,Numba CUDA 中推荐的向量类型名称格式为 <base_type>x<N>
,其中 base_type
是向量的基础类型,N
是向量中的元素数量。例如 int64x3
、uint16x4
、float32x4
等。对于新的 Numba CUDA 内核,这是实例化向量类型的推荐方式。
为了方便,用户在将现有的CUDA C/C++内核适配到Python时,可以使用与C/C++命名一致的别名。例如,float3
别名为 float32x3
,long3
别名为 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个分量可以通过字段 x
、y
、z
和 w
分别访问。在当前版本的Numba中,这些分量在构造后是不可变的;预计在未来的版本中将添加对修改向量分量的支持。
v1 = float32x2(1.0, 1.0)
v2 = float32x2(1.0, -1.0)
dotprod = v1.x * v2.x + v1.y * v2.y