小编fra*_*k90的帖子

分支预测和分支目标预测优化

我的代码经常调用具有多个(不可预测的)分支的函数.当我分析时,我发现它是一个小瓶颈,在条件JMP上使用了大部分CPU时间.

考虑以下两个函数,其中原始函数具有多个显式分支.

void branch_example_original(void* mem, size_t s)
{
    if(!(s & 7)) {
        /* logic in _process_mem_64 inlined */
    }
    else if(!(s & 3)) {
        /* logic in _process_mem_32 inlined */
    }
    else if(!(s & 1)) {
        /* logic in _process_mem_16 inlined */
    }
    else {
        /* logic in _process_mem_8 inlined */
    }
}
Run Code Online (Sandbox Code Playgroud)

这是新功能,我尝试删除导致瓶颈的分支.

void branch_example_new(void* mem, size_t s)
{
    const fprocess_mem mem_funcs[] = {_process_mem_8, _process_mem_16, _process_mem_32, _process_mem_64};
    const uint32_t magic = 3 - !!(s & 7) - !!(s & …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization x86 branch-prediction

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

标签 统计

branch-prediction ×1

c ×1

c++ ×1

optimization ×1

x86 ×1