CUDA 排序¶
Accelerate 提供了在 CUDA GPU 上对数组进行排序的例程。
排序大数组¶
accelerate.cuda.sorting.RadixSort
建议使用该类对数字类型的大型(大约超过 100 万个项目)数组进行排序。
-
类
accelerate.cuda.sorting.
RadixSort
(MAXCOUNT,D型细胞,降=假,流= 0 )¶ 提供基数排序和基数选择。
此处实现的算法最适合大型数组 ( ),因为它使用多个内核启动引入了延迟。建议改为用于较小阵列的批次。
N > 1e6
segmented_sort
参数: - maxcount ( int ) – 要排序的最大项目数
- D型(numpy.dtype) -元素类型排序
- 降序( bool ) – 按降序排序?
- 流– 运行内核的 CUDA 流
-
argselect
( k , keys , begin_bit=0 , end_bit=None ) ¶ 类似于
RadixSort.select
但返回新的排序索引。参数: - 键(numpy.ndarray)– 就地排序的键
- begin_bit ( int ) – 要排序的第一位
- end_bit ( int ) – 可选。最后一点排序
返回: 将新排序指示为 CUDA 设备或主机上的数组的索引。
-
argsort
(键, begin_bit=0 , end_bit=None ) ¶ 类似于
RadixSort.sort
但返回新的排序索引。参数: - 键(numpy.ndarray)– 就地排序的键
- begin_bit ( int ) – 要排序的第一位
- end_bit ( int ) – 可选。最后一点排序
返回: 将新排序指示为 CUDA 设备或主机上的数组的索引。
-
close
( ) ¶ 显式释放内部资源
删除对象时自动调用。
-
init_arg
(大小) ¶ 使用从零开始的升序整数初始化 uint32 的空 CUDA ndarray
参数: size ( int ) – 输出数组的元素数 返回: 带有值的数组 [0, 1, 2, ...m size - 1 ]
-
select
( k , keys , vals=None , begin_bit=0 , end_bit=None ) ¶ 在 上执行就地 k-select
keys
。内存传输是自动执行的。
参数: - 键(numpy.ndarray)– 就地排序的键
- vals ( numpy.ndarray ) – 可选。要沿排序重新排序的其他值。它被修改到位。
uint32
此版本仅支持 dtype。 - begin_bit ( int ) – 要排序的第一位
- end_bit ( int ) – 可选。最后一点排序
-
sort
(键, vals=None , begin_bit=0 , end_bit=None ) ¶ 对 执行就地排序
keys
。内存传输是自动执行的。参数: - 键(numpy.ndarray)– 就地排序的键
- vals ( numpy.ndarray ) – 可选。要沿排序重新排序的其他值。它被修改到位。
uint32
此版本仅支持 dtype。 - begin_bit ( int ) – 要排序的第一位
- end_bit ( int ) – 可选。最后一点排序
对许多小数组进行排序¶
使用accelerate.cuda.sorting.RadixSort
小(大约不到1万件)阵列有显著的开销,由于多内核启动。
更好的选择是使用accelerate.cuda.sorting.segmented_sort()
- 它启动单个内核来对一批许多小数组进行排序。
-
accelerate.cuda.sorting.
segmented_sort
(键, vals ,段,流=0 ) ¶ 对小段 (N < 1e6) 执行就地排序。
参数: - 键(numpy.ndarray)– 就地排序的键。
- vals ( numpy.ndarray ) – 要沿排序就地重新排序的值。
uint32
此实现仅 支持 dtype。 - 段(numpy.ndarray)– 按升序分割分隔位置。例如,对于,
, , 的段 。
array([3, 6, 8])
keys[:3]
keys[3:6]
keys[6:8]
keys[8:]
- 流- 可选。在其中执行内核的 cuda 流。