快速注册时的字节数?

时间:2009-10-16 22:08:39

标签: assembly sorting simd

给定4个字节的寄存器(或SIMD的16个寄存器),必须有一种有效的方法来使用一些指令对寄存器中的字节进行排序。

提前致谢。

4 个答案:

答案 0 :(得分:7)

发现它!这是Furtak,Amaral和Niewiadomski在2007年的论文“使用SIMD寄存器和指令在分类算法中启用指令级并行”。第4节。

它使用4个SSE寄存器,有12个步骤,并运行19个指令,包括加载和存储。

同一篇论文对使用SIMD动态制作排序网络做了一些很好的工作。

答案 1 :(得分:5)

查找效率sorting network的N =您关心的字节数(4或16)。将其转换为比较和交换指令序列。 (但是,对于N = 16,这将超过'少数'。)

答案 2 :(得分:4)

为了加快字符串的排序,我最终在每个double中打包7个字节并在SSE2中排序(排名)16个双打的数组,使用bitonic排序创建两个8的运行,并使用二进制合并来合并两个运行。您可以在此处查看第一部分http://mischasan.wordpress.com/2011/07/29/okay-one-more-poke-at-sse2-sorting-doubles/(asm)和此处http://mischasan.wordpress.com/2011/09/02/update-on-bitonic-sse2-sort-of-16-doubles/(C),以及比特步合并步骤(如果您想要一直使用SSE):http://mischasan.wordpress.com/2012/11/04/sse2-odd-even-merge-the-last-step-in-sorting/。我用这种方法替换了qsort底部的插入排序,它的速度是直接qsort的5倍。 HTH

我没有看过UofA论文;比特逻辑来自旧学校(CTM)GPGPU编程。

抱歉嵌入式链接字符串;我不知道如何在评论stackoverflow中添加可点击链接。

答案 3 :(得分:1)

所有排序算法都需要将值从一个地方“交换”到另一个地方。由于您正在讨论文字CPU寄存器,这意味着任何类型都需要另一个寄存器作为临时位置来保存交换的字节。

我从未见过使用内置方法对芯片内的字节进行排序的芯片。不是说它还没有完成,但我想不出这种指令有很多用途。