酷睿处理器|说人话系列:英特尔酷睿12代详解(8)win11为跑分而生

酷睿处理器|说人话系列:英特尔酷睿12代详解(8)win11为跑分而生

文章图片

酷睿处理器|说人话系列:英特尔酷睿12代详解(8)win11为跑分而生

文章图片

酷睿处理器|说人话系列:英特尔酷睿12代详解(8)win11为跑分而生

文章图片

酷睿处理器|说人话系列:英特尔酷睿12代详解(8)win11为跑分而生


点题

说到12代酷睿 , 就要提这两年AMD跟英特尔持续不断的堆核大战 。 说到堆核 , 就要提多核推土机跟双核酷睿的那点事 。 说推土机跟酷睿 , 就要回到windowsXP时代 , 回看windows的多核心调度方式是怎样的 , 今年下半年 , 酷睿13代就要出来了 , 软件硬件两开花 , 希望大家多多关注 。
windows第一次支持多核心是XP时代 。 windowsXP不能严格的说是支持4核 , 而是支持4线程 。 不过XP出来的1999年 , 内核跟线程是绑定的 , 没有多线程的概念 。 早期OS就比如这个XP , 它的多核很简单——就是核心轮流切换 。 因为CPU率是1GHZ起步的 , 就是一秒钟运行10亿次 , 就是每个周期0.000000001秒 , 如果第一个核心运行10个周期 , 那11到20周期扔给第二个核心 , 第一个核心这时候执行别的程序 , 就这样逐渐轮流执行 , 显然会有数倍于单核执行的效率 。 现在的安卓多核切换 , AMD的自动多核也是类似机制 , 不过主要依据是核心温度高低 。 安卓还有一些多核优化是能耗指定 , 比如大小核 , 可以指定给预测功耗小的进程扔给小核运行 , 实现大幅度节能 。 记住这个点 , 后面酷睿12代处理器也采用了某些类似机制 。

理想的4核处理器调度
打开windows自带的任务管理器 , 可以看到进程的占用数值 , 比如内存CPU硬盘的工作占用率 , win10这个可视化做的很好 。 每个进程是一堆线程的集合 。 由于CPU速度太快 , 一秒钟10亿次起步 , 运行一个100%吃满单核的程序 , 在任务管理器你并不会看到每个框框100%占用然后迅速在不同核心间切换 , 而是平均负载25%这样子 。

自动多核就是看负载是不是均匀
CPU多核性能的高低 , 很大程度看L3缓存速度跟容量 。 L3共享缓存大了 , 数据指令传输速度就高 , 就算传输速度不变 , 命中率也大幅提高 , 所以一般情况下 , L3就是三级缓存是如此的重要 , 三级缓存大多核间指令切换的快自然性能就高 。 记住第二点 , 因为酷睿12代大幅增加了三级缓存 。

三级缓存的重要性
windows的内核是windowsNT , 以下简称NT 。 每个线程在NT内核中都是ETHREAD结构体 , 结构体中还存在着这样的信息:进程ID、父进程ID、进程映象名 。 windows的进程调度是一个进程控制的 , SySTem进程中就包含了这个进程 , 用户不可见也不可调用 。 巴拉巴拉这么多主要是说 , 一切软件的最后编程 , 都要做多核优化 。 如果采用windows默认方式 , NT内核会自动制定亲缘关系 , 不同的函数跟编码决定了不同优先级 , 这个效率不高比如安卓 。 而渲染 , 剪辑等针对每个像素的编程软件 , 大量工作重复度高 , 都是操作RGB值 , 所以特别容易优化多核 。
像游戏这种线程间负载不均匀 , 但是目的可控的需要一条贯通逻辑的 , 相对来说多核优化困难 。 主线程自然要负载很多 , 而其他的如何发挥 , 如何保持逻辑不干扰一直运行 , 这是个世纪难题 。 但是要手动做多线程优化 , 最主要的 , 一定要有一个main进程来作为第一 。 比如浏览器 , 必须有一个最高优先级的核心进程来控制其他 , 第一个核心的负载就要很重 。