首页 > 系统相关 >linux 分支预测

linux 分支预测

时间:2023-05-28 14:34:22浏览次数:55  
标签:预测 指令 数组 linux 排序 CPU 分支

有一个元素为 0 到 100 之间随机数字组成的一维数组:

接下来,对这个数组做两个操作:

  • 第一个操作,循环遍历数组,把小于 50 的数组元素置为 0;
  • 第二个操作,将数组排序;

那么问题来了,你觉得先遍历再排序速度快,还是先排序再遍历速度快呢?

 

对于 if 条件语句,意味着此时至少可以选择跳转到两段不同的指令执行,也就是 if 还是 else 中的指令。那么,如果分支预测可以预测到接下来要执行 if 里的指令,还是 else 指令的话,就可以「提前」把这些指令放在指令缓存中,这样 CPU 可以直接从 Cache 读取到指令,于是执行速度就会很快。

当数组中的元素是随机的,分支预测就无法有效工作,而当数组元素都是是顺序的,分支预测器会动态地根据历史命中数据对未来进行预测,这样命中率就会很高。

因此,先排序再遍历速度会更快,这是因为排序之后,数字是从小到大的,那么前几次循环命中 if < 50 的次数会比较多,于是分支预测就会缓存 if 里的 array[i] = 0 指令到 Cache 中,后续 CPU 执行该指令就只需要从 Cache 读取就好了。

如果你肯定代码中的 if 中的表达式判断为 true 的概率比较高,我们可以使用显示分支预测工具,比如在 C/C++ 语言中编译器提供了 likely 和 unlikely 这两种宏,如果 if 条件为 ture 的概率大,则可以用 likely 宏把 if 里的表达式包裹起来,反之用 unlikely 宏。

实际上,CPU 自身的动态分支预测已经是比较准的了,所以只有当非常确信 CPU 预测的不准,且能够知道实际的概率情况时,才建议使用这两种宏。

标签:预测,指令,数组,linux,排序,CPU,分支
From: https://www.cnblogs.com/god-of-death/p/17438218.html

相关文章

  • Linux命令
    /根目录ls查看文件参数-l-a-p-h可以混合使用-h必须和-l配合使用pwd查看当前工作目录cd切换目录~表示当前用户的home目录mkdir创建文件夹-p路径中表示的所有文件夹都会创建,适用于有父文件夹的文件夹touch创建文件cat查看文件内容more文件内......
  • 使用linux安装mysql步骤
    在Linux上安装MySQL的详细步骤:打开终端并登录到Linux系统。使用以下命令更新系统软件包列表:sudoaptupdate安装MySQL服务器:sudoaptinstallmysql-server在安装过程中,系统会提示您输入MySQLroot用户的密码。请确保您输入的密码足够强度,并且请记住该密码。它将在以后访问MySQL时......
  • Linux部署ArcGIS Server 10.7.1简要手册
    一、经过测试可以正常安装并运行ArcGISServer10.7.1的发行版:CentOS7.9,Ubuntu/UbuntuServer22.04.2LTS,RedhatEnterpriseLinux9.1二、ArcGISServer使用的端口:6443,6080,6006,1098,6099,确保这些端口没有被其他程序占用,否则安装完毕之后,管理页面无法打开,详情见官方链接查看......
  • Linux | ubuntu虚拟机扩容
    Linux|ubuntu虚拟机扩容目录Linux|ubuntu虚拟机扩容1.情形2.操作2-1.虚拟机设置(关机状态)2-2.开启虚拟机2-3.安装gparted2-4.打开软件2-5.修改、设置删除旧的交换分区,便于重新划分/dev/sda1和linux-swap分区;重新划分/dev/sda1分区;重新设置linux-swap分区;最后点击确定,执行所有......
  • Linux | Linux系统目录
    Linux|Linux系统目录Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:/bin二进制可执行命令/dev设备特殊文件/etc系统管理和配置文件/etc/rc.d启动的配置文件和脚本/home用户主目录的基点,比如用户user的主目录就是/home/user,......
  • linux的locate命令和find命令的区别
    一:locate命令 locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。 即先运行:updatedb(无论在那个目录中均可,可以放在crontab中)后在  /var/lib/sloc......
  • Linux—基础篇:目录结构
    1、基本介绍1、linux的文件系统是采用级层式的树状目录结构,在此结构的最上层是根目录“/”,然后在此目录下创建其他目录2、在Linux的世界里,一切皆文件!!!2、具体的目录结构不用背,知道即可2.1、/bin(常用)(/usr/bin、/usr/local/bin)是binary的缩写,这个目录存放着最经常使用的命令2.2、......
  • 从gitee上拉取django项目到Linux中
    1.从gitee拉取django项目: 2.安装虚拟环境: 3.创建虚拟环境: 4.进入虚拟环境: 5.安装项目模块: ......
  • 202305280952-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql启动报错》
    在bash执行"systemctlstartmysqld"   提示:“Jobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"and"journalctl-xe"fordetails.”   /var/lib/mysql权......
  • Roblox 不但不支持 Linux,还屏蔽了 Wine
    据悉,Roblox不但不支持 Linux,还屏蔽了Wine。Roblox不但不支持Linux,还屏蔽了Wine多人游戏Roblox没有Linux原生版本,但之前可以通过Wine在Linux上运行。不过其最新的反作弊软件专门屏蔽了Wine应用,以至于其在Linux上无法运行。该公司的员工在其官方论坛上对......