首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并行计算奇偶校验

并行计算奇偶校验
EN

Stack Overflow用户
提问于 2017-02-05 15:17:50
回答 1查看 192关注 0票数 0

考虑以下代码

代码语言:javascript
运行
复制
typedef unsigned uint;

uint parity( uint64_t x )
    {
    uint32_t v = x ^ (x >> 32);
    v ^= v >> 16;
    v ^= v >> 8;
    v ^= v >> 4;
    v ^= v >> 2;
    return (uint)(v ^ (v >> 1)) & 1;
    }

由于Intelx86-64机器上的指令级并行,有没有办法从根本上重新组织这段代码,以获得显著的改进?

GCC生成了以下代码

代码语言:javascript
运行
复制
parity(unsigned long):
    mov     rax, rdi
    shr     rax, 32
    xor     eax, edi
    mov     edi, eax
    shr     edi, 16
    xor     eax, edi
    mov     edi, eax
    shr     edi, 8
    xor     eax, edi
    mov     edi, eax
    shr     edi, 4
    xor     eax, edi
    mov     edi, eax
    shr     edi, 2
    xor     eax, edi
    mov     edx, eax 
    shr     eax
    xor     eax, edx 
    and     eax, 1
    ret
EN

回答 1

Stack Overflow用户

发布于 2017-02-05 15:35:44

在32位的世界里,我会直接用汇编语言编写,比如test eax,eax,然后是SETPO EAX

UPDATE 2017-02-06:@EOF是对的,test命令仅根据低字节设置奇偶校验位。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42049503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档