分支预测浅谈

本文探讨了CPU分支预测技术如何影响程序性能,通过一个数组求和的例子,展示了排序后数组运行效率提升的原因。分支预测器通过预测分支指令结果减少处理器停顿,提高指令流水线效率。在无法有效预测的无序数据中,预测成功率降低,导致效率下降。通过位运算优化,可以避免分支判断带来的开销,提高运算效率。
摘要由CSDN通过智能技术生成

背景

近期在项目中处理业务逻辑时遇到了大量需要进行连续条件判断的情况,于是联想起stackoverflow上的高票问答, Why is it faster to process a sorted array than an unsorted array , 并结合自身理解做一个简要的分析整理。

问题可以抽象如下:

将一组不大小超过256的随机正整数填入数组中, 然后将数组中大于128的元素求和。但是会将程序分为两个参考组, 其一是在求和前对数组进行一次排序, 另一组则在求和前不进行排序,最后对比观察结果和运算时间。

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    const unsigned arrSize = 32768;
    int data[arrSize] = {
  0};

    // 随机填充0~256间的整数,为了方便结果对比此处未加入随机种子
    for (unsigned int idx = 0; idx < arrSize; ++idx)
        data[idx] = std::rand() % 256;

    // 观察是否排序对求和计算的影响
    std::sort(data, data + arrSize);

    //开始验证
    unsigned long long sum = 0;
    clock_t startTime = clock();

    //此处为了加强对比效果,将求和计算循环执行了10万次
    for (unsigned int i = 0; i < 100000; ++i)
    {
        for (unsigned int idx = 0; idx < arrSize; ++idx)
        {
            if (data[idx] >= 128)
                sum 
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值