CUDA 排序

Accelerate 提供了在 CUDA GPU 上对数组进行排序的例程。

排序大数组

accelerate.cuda.sorting.RadixSort建议使用该类对数字类型的大型(大约超过 100 万个项目)数组进行排序。

accelerate.cuda.sorting.RadixSortMAXCOUNTD型细胞降=假流= 0

提供基数排序和基数选择。

此处实现的算法最适合大型数组 ( ),因为它使用多个内核启动引入了延迟。建议改为用于较小阵列的批次。N > 1e6segmented_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 流。