CUDA 特有类型
CUDA 内置目标弃用通知
Numba 内置的 CUDA 目标已弃用,后续开发已转移到 NVIDIA numba-cuda 包。请参阅 内置 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