相关疑难解决方法(0)

QWORD使用SIMD SSE ... AVX将连续的7位与字节对齐进行混洗

我想知道在任何SIMD系列指令中是否可以使用以下内容.

我有一个带有63位有效位的qword输入(从不为负).从LSB开始的每个连续7位是随机对齐到一个字节,左填充为1(除了最重要的非零字节).为了说明,为了清楚起见,我会使用字母.

结果只有有效字节,因此大小为0-9,转换为字节数组.

In:         0|kjihgfe|dcbaZYX|WVUTSRQ|PONMLKJ|IHGFEDC|BAzyxwv|utsrqpo|nmlkjih|gfedcba
Out: 0kjihgfe|1dcbaZYX|1WVUTSRQ|1PONMLKJ|1IHGFEDC|1BAzyxwv|1utsrqpo|1nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)

大小= 9

In:  00|nmlkjih|gfedcba
Out: |0nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)

大小= 2

我知道填充是分开的.洗牌调整是我的问题.这可能吗?

编辑2

这是我更新的代码.在单线程Core 2 Duo 2 GHz,64位上获得持续长度输入的持续46 M /秒.

private static int DecodeIS8(long j, ref byte[] result)
{
    if (j <= 0)
    {
        return 0;
    }

    int size;

    // neater code: gives something to break out of
    while (true)
    {
        result[0] = (byte)((j & 0x7F) | 0x80);
        size = 0;
        j >>= 7;

        if (j == 0) break;

        result[1] = (byte)((j & 0x7F) | 0x80); …
Run Code Online (Sandbox Code Playgroud)

x86 sse bit-manipulation simd avx

3
推荐指数
1
解决办法
692
查看次数

标签 统计

avx ×1

bit-manipulation ×1

simd ×1

sse ×1

x86 ×1