硬件加速的多路归并排序([object Object])。将最多4个已预排序的列表归并为一个降序排列的输出。每个元素是固定8字节的值-索引对结构体。
TMRGSORT操作的是8字节结构体,Tile中的每个元素构成值-索引对的一部分:
因此Tile中排序对的数量为:
[object Object]:[object Object][object Object]:[object Object]
实现通过 [object Object] 将 [object Object] 转换为对数:
[object Object]
将已预排序的输入列表按降序归并到 [object Object] 中:
将 [object Object] 视为 4个连续等长的已排序块,在单个Tile内完成4路归并。
[object Object]
约束:
[object Object]必须是 64 的倍数。[object Object]必须是[object Object]的整数倍。[object Object]必须在[object Object]范围内。- 不需要
[object Object]—结果直接写入[object Object]。 - 无
[object Object]参数(固定为非挂起模式)。
[object Object] 对应的排序对数:
将2~4个独立的已预排序列表归并为一个有序输出。
[object Object]
模板参数 [object Object]:
[object Object]:正常归并—处理所有输入数据。[object Object]:当任一输入列表耗尽时,硬件挂起并通过[object Object]返回每个列表实际处理的元素数量。
[object Object] 结构体:
[object Object]
仅在 [object Object] 时有意义。数据来自硬件寄存器 [object Object]。
不同列表数的mask配置:
同步形式(概念性):
[object Object]
[object Object]
[object Object]
声明于 [object Object]:
[object Object]
[object Object]
[object Object]
[object Object]必须是64的倍数。[object Object]必须是[object Object]的整数倍。[object Object]必须在[object Object]范围内。
[object Object] 被使用作为 [object Object] 硬件指令的中间输出缓冲区。归并排序结果首先写入 [object Object],然后通过 [object Object](UB到UB的memcpy)复制到 [object Object]。
[object Object]必须与[object Object]和所有[object Object]Tile具有相同的元素类型([object Object]或[object Object])。[object Object]必须[object Object]且为行主序。[object Object]的Cols必须至少为所有输入源Cols之和:- 2列表:
[object Object] - 3列表:
[object Object] - 4列表:
[object Object]
- 2列表:
- 辅助函数
[object Object]返回所需的[object Object]Cols:
[object Object]
不需要 [object Object]。单列表变体直接写入 [object Object]。
TMRGSORT常用于通过迭代归并排序实现TopK选择:
[object Object]
两者实现几乎完全相同,均调用 [object Object] 硬件指令。微小差异:
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]