真是一波未平一波又起……
刚搞定了多线程,参考《解决Intel12代酷睿CPU【小核载满,大核围观】的问题(WIN11)》。
没想到,测试最后的程序时发现:
即使是最佳性能模式下,系统没有其它负载时,运行一个单线程的程序,基本上都在小核上切换着跑。
导致以前单线程的程序运行很慢。
偶然又会让大核跑一会儿,这时候就很快。
用上一篇帖子里的Pascal 单线程程序为例,测试了很多次。
最低52秒完成,最高69秒
差距非常大。
很难理解,这种整体低负载,一个线程占用很高的情况下,应该用大核吧???
华擎主板BIOS里有个传统游戏模式,描述是用ScrLock来切换e-core的core parking。
试了一下,没有任何效果。
PS:关于CPU core parking。
微软:
Windows Core parking for Windows Server 2012 works by Parking and unparking of cores as needed to adjust to changing workloads for efficiency reasons. Parking a core, by itself, does not save power. Parking a core alters the behavior of the scheduler to target threads at other cores. This allows the parked core to stay idle more (decreasing its power consumption), at the cost of placing additional work on unparked cores (increasing their power consumption). Whether or not this tradeoff results in a more or less efficient system is highly dependent on the processor. Windows is tuned to select optimal settings (core parking on or off) depending on which processor is installed and for Windows Server 2012 is considered the most efficient.
另一个:
Core parking basically makes your processors go into a sleep state known as (C6) and is supported by most knew processors. This allows your computer to save power. There is a trade off for disabling parking. If you use a laptop or tablet, you may notice a slight difference in battery life once you disable core parking on your CPUs. If you disable core parking on your CPUs, your computer may have faster benchmarks. (Reported higher frame rates by gamers and power users).
偶然因为打开了监控软件AIDA64,想看看CPU温度等信息。
结果神奇的事情发生了。
只要AIDA64开着,单线程程序就会在p-core上切换执行
只要关闭AIDA64的监控,单线程程序就回到在e-core上切换执行……
好像老板看着就卖力工作,老板不看就开始摸鱼。
试了一下用ThrottleStop也是这样现象。
但是HWiNFO64开监控似乎又起不到同样的作用。
当然Windows的任务管理器也不会有这种奇妙效果(毕竟一直开着它的)。
看了一下监控的负载也没有挂在e-core上啊,这让我更加搞不懂了。
似乎操作系统不太明白这种【友达以上,恋人不足】状态的程序该由哪种核心来执行。
补一个单线程的对比表格:
程序 | 8P + 0E | 8P8E性能 | 8P8E挂监控 | 9900(ES) | 9900KS | 单位 |
---|---|---|---|---|---|---|
Pascal单线程 | 48 | 59-69 | 54 | 79 | 70 | 秒 |
另一个单线程 | 1059 | 1367 | 1050 | 1712 | 1408 | 秒 |
综合来看,挂一个监控,比关掉8个小核划得来。
重启进BIOS开关小核,已经很麻烦了。
更不可能一台机器反复装Win10,Win11进行测试。
所以只好上网查,都说配合大小核就应该用Win11,都说是Win10下有问题。。。
看到有说法:
Win10会在所谓的“最佳核心”中固定挂上单核负载。Win11则会在不同的核心中不断传递负载。
Win10的好处是可以让CPU单核睿频保持更高,同时尽量利用体质较好的核心。Win11的好处降低单个核心的压力,让单核应用某种程度上变成伪多核,多核优化差的程序性能上会略有改善。所以会看到部分DX11和DX9游戏在1080P下帧数暴增。
Win10的机制存在概率出现后台其他程序驻留在“最佳单核”线程中,导致前台的主程序性能受到严重影响,需要关闭相关进程重新刷一下分配才能解决。
Win10解决大小核调度的方式是会在小核中存在一个很小的负载,应该是起到标记的作用。
试了一下单线程Win11确实在切换:
但是我测试自己的单核程序,Win10下却不是只跑在一个核心上。
如下图:这不是也在切换嘛???
难道Win10升级版本后变得不一样了……
吓得我赶紧看了下进程详情。
确实是单线程的程序,万年不变的6%占用率(8核16线程嘛)。
所以确实不知道怎么办了。
那就开个监控软件吧,别管原理是什么啦……
等待官方完善大小核调度问题。
@微软,@英特尔,请不要再让我们做【拔掉独显,提升性能】啊不对……
应该是请不要让我们做【关闭小核,提升性能】这种奇葩的操作了,好吗。