巫师3血与酒和KSP的多线程CPU使用优化简单分析
talking about《witcher 3 blood and wine》 and 《kerbal space program》’s CPU multithread optimization
众所周知,随着CPU单线程性能提升的困难,厂商将重点逐渐转移到了多线程CPU的发展。同样的,这也逼迫着软件(这里是游戏)厂商,去尽量的挖掘多线程CPU的能力。但是,终究到底,通常程序是具有前后的关联性的,这也意味着程序的并行度始终是有很大限制的。
这里的并行度并不是指简单的多线程限制,同样的微指令(μops)同样也被并行度限制,超线程技术本身就是微指令并行度到达了极限的体现。
巫师3血与酒
经过实际测量(6700HQ),我可以通过同时不同线程数量的使用时间来求解多线程的优化。这里的使用率,则是总CPU周期的空占比。
需要注意的是,这种现象并不是在任务管理器中可见的,因为系统的调度,主线程总之在不同的CPU逻辑线程(4核8线程,就是四个物理核心8个逻辑核心)间切换的,在宏观(长时间的采样,也就是低采样率)下,会显示出好像每个CPU逻辑线程都在负载的感觉,或者没有明显的倾向。
从结果来看,巫师3血与酒能够有效的使用两个线程的CPU资源,大于3个线程的资源对于这个程序来说难以利用,而极限能够同时调用7个线程的CPU资源。对于周期求和,可以得到,巫师3血与酒使用了1.64个CPU逻辑核心的资源。实际上也使用了1.486个CPU物理核心的资源。顺便可以得到超线程的提升在10%左右
KSP
KSP的例子显然比巫师3更加的极端
这里,KSP能够有效的使用单线程的CPU资源,最多调用4个线程的资源,这里体现的是较低的线程并行度。由于此限制,KSP能够使用1.1个逻辑核心的资源。也就是说,这要求CPU的单核性能越高就越有优势。
CPU实际使用了0.82个物理核心的资源,这意味着超线程的性能提升在34%,除了较低的线程并行度同样也显示出了较低的μops并行度。
小结
不管是巫师3血与酒还是KSP都显示了,游戏这一种程序是一种本质单线程的程序。实际上除了部分大计算力的需求(诸如渲染),大部分的程序都是如此。以至于SPEC之类相对接近一些日常使用的CPU性能基准,对于多线程(SPEC rate)是通过多实例完成的,多任务将是接下来CPU多核心发展的体现。
这也并不是说,对于游戏需求一个双核四线程尽量飙高频的CPU就是最合适游戏的。除了游戏系统也总是拥有背景负载的,显然更多的核心数留出冗余的CPU资源是更好的。