小编poy*_*poy的帖子

从比特流中提取10位字

我需要从原始比特流中提取所有10位单词 ABACABACABAC...

它已经可以与天真的C实现一起使用,例如

for(uint8_t *ptr = in_packet; ptr < max; ptr += 5){
    const uint64_t val =
        (((uint64_t)(*(ptr + 4))) << 32) |
        (((uint64_t)(*(ptr + 3))) << 24) |
        (((uint64_t)(*(ptr + 2))) << 16) |
        (((uint64_t)(*(ptr + 1))) <<  8) |
        (((uint64_t)(*(ptr + 0))) <<  0) ;

    *a_ptr++ = (val >>  0);
    *b_ptr++ = (val >> 10);
    *a_ptr++ = (val >> 20);
    *c_ptr++ = (val >> 30);
}
Run Code Online (Sandbox Code Playgroud)

但是性能对于我的应用程序来说是不够的,因此我想使用一些AVX2优化来改善它。

我访问了网站https://software.intel.com/sites/landingpage/IntrinsicsGuide/#,以找到可以提供帮助的任何功能,但似乎没有任何功能可用于10位字,只有8位或16位字。这似乎是合乎逻辑的,因为10位不是处理器固有的,但对我来说却很难。

有什么方法可以使用AVX2解决此问题?

c optimization simd bit-packing avx2

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

标签 统计

avx2 ×1

bit-packing ×1

c ×1

optimization ×1

simd ×1