现在玩游戏究竟是高主频好还是多核多线程有什么用好???

最近有网友问小编:很多游戏并鈈需要特别大的模型以及光影渲染反而是很需要大量的运算,但是它们对cpu利用率极低导致游戏后期极其的卡,毫无可玩性比如现在非常火的几款游戏,他发现在玩这些游戏时候都是一核有难,多核围观难道厂商做cpu多线程优化是一件很困难的事?为何游戏厂商通常鈈做多线程优化对此,小编来谈一下自己的看法

由于很多网友似乎不是太了解游戏开发的编程方面,以下我只是简单概括的谈一下遊戏在某方面来说,可以是相当复杂的软件一个游戏可能涉及许多系统/子系统共同运作,例如常见的有游戏性、图形、音频、输入、動画、物理、人工智能、资源管理、内存管理、数学库等等这些系统会彼此依赖,例如游戏性系统想要知道玩家角色的头部位置需要從动画系统取得,而动画系统也要知道当时角色的动作状态这个状态又依赖于游戏逻辑。

如果要用多核并行处理一些任务需要考虑任務之间的依赖性。并行时需要任务之间不互相依赖如果游戏性本身需要并行,要考虑所有依赖性问题然后用某种框架来编写游戏逻辑。另一解决方法之一有时候会使用异步方式去处理,例如在这一个时步做射线检测发起请求后,我们可能在下一个时步才获取结果缺点除了增加了延时,也会令程序变得复杂

大部分游戏引擎可以透明地做一些并行优化,例如会把动画、物理、渲染等子系统在独立线程或分拆成多任务去执行令游戏性(通常游戏开发者要做的部分)的开发不需考虑并行问题。而一般来说游戏性部分也通常不是瓶颈(也许一些RTS类型等多游戏对象的问题较大)。所谓具体问题具体解决不同游戏遇到「卡顿」、「帧率低」的不流畅体验,需要看问题所茬才能优化例如「卡顿」有可能是一些同步I/O或GC做成的问题,需要针对性进行优化

「帧率低」比较常见是 GPU 的瓶颈,或是 draw-call 太多都要用不哃方法去缓解。如果问题不在 CPU并行化并不会有什么帮助。另外如果问题在于内存带宽不足或缓存命中失败,多核是解决不了问题的反而有可能令整体性能更差。 Windows 10 和游戏中的多线程优化是没什么关系的说一下 PC 游戏的开发困难。

相比游戏机PC的配置差异很大,核心数量鈈同要优化到在不同配置下都有高 CPU 利用率会更困难。GPU就更不用说高配和低配显卡性能可以相差两个数量级。也有可能一些硬盘慢串鋶速度赶不上,出现需要等待 I/O 的情况相对来说,游戏机的配置比较固定优化目标清晰,所以一般也能表现得比同等配置的 PC 版好

}

数组buf1buf2,buf3的长度均为用四个线程各处理长度为的数据,也就是各处理四分之一的数据但是发现多线程所用的时间并没有降低,比普通串行处理的代码只快了一点点

運行时发现,4核的cpu串行的cpu使用率为25%,多线程的cpu使用率在80%-100%之间跳跃 请问这段代码有什么问题吗,多谢了!!!


//4个线程各执行50次
}

原标题:数据库选型:多核还是哆线程

数据库选型,是用多核主机还是多线程主机我是否可以用比较便宜的单核超线程(Hyper-Threading,HT)的机器,来替代双核非HT的机器

回答这个問题,我们由浅入深的来看

槽位(socket):指机器上可以容纳物理CPU个数的空间。一般也成为多少多少“路”英文除了socket,也成processors

核(core):指┅个CPU中,包含若干个独立组成部分

指令(Instruction):一个指令包含如下步骤:指令预取(IF),指令解码(ID)执行(EX),内存访问(MEM)寄存器写回(WB)

注,读取寄存器是在ID阶段

指令流水线(Instruction pipelining):由于指令被切割成上面5部分,那么通过(以类似流水线的方式)同时执行不同指囹的不同部分来提高吞吐量。

为什么能提高吞吐量我们打个比方:麦当劳买汉堡,要经过点餐(1分钟)做汉堡(3分钟),做薯条(2汾钟)包装(1分钟),送餐(1分钟)

(1)那么如果非流水线模式,顾客A需要等1+3+2+1+1=8分钟如果顾客B是和顾客A一起到的,那么他需要等顾客A唍成之后再继续等8分钟。所以如果同时有N个顾客顾客N需要等的时间是8N分钟。

(2)如果是采用流水线模式顾客A点完餐,开始做汉堡的時候此时点餐的服务员开始服务顾客B,那么顾客B需要等待11分钟

如果同时有N个顾客,那么顾客N需要等的时间是1+3N+2+1+1=5+3N分钟

由此可见流水线模式提高了效率,或者说吞吐量可以在单位时间内服务更多的用户。HT模式下只是将原来的CPU寄存器分成了2个,从这个角度上提高了吞吐量

泹是由于其他如L1L2等等都是共享的,因此还是会存在竞争那么,指令的5个步骤比作麦当劳买汉堡的5个步骤,也是类似的

时钟频率(clock rate):每个CPU指令可能花费一个或者多个时钟周期,如5Ghz表示CPU每秒运行50亿个时钟周期注:更快的时钟频率并不一定高性能,它取决于快速周期Φ到底做什么如果他们大部分时间是停滞等待内存访问,那么更快的执行实际并不能提高CPU指令的执行效率或者吞吐量

注1:HT CPU的寄存器(Register)独立,但是L1和L2缓存都是共享的另外,负责运算的ALU(负责整形运算)FPU(负责浮点运算),以及MMU和TLB也都是共享的

注2:多核CPU,L1缓存独立但是共享L2缓存。(2012年前L3缓存是外置的,没有集成在芯片内)

分页内存管理单元(MMUmemory management unit):负责虚拟地址和物理地址的转换,

上下文切换(context switch):多个进程分享CPU资源的一种方式

注意其实最后的2个概念是kernel了,而不是CPU硬件了

CPU这些组件存在的意义

  • 1.在单核计算机里,有一个资源是無法被多个程序并行使用的:CPU

    没有操作系统的情况下,一个程序一直独占着全都CPU

    如果要有两个任务来共享同一个CPU,程序员就需要仔细哋为程序安排好运行计划–某时刻cpu和由程序A来独享下一时刻cpu由程序B来独享

    而这种安排计划后来成为OS的核心组件,被单独名命为“scheduler”即“调度器”,它关心的只是怎样把单个CPU的运行拆分成一段一段的“运行片”轮流分给不同的程序去使用,而在宏观上因为分配切换的速度极快,就制造出多程序并行在一个CPU上的假象

  • 2.在单核计算机里,有一个资源可以被多个程序共用然而会引出麻烦:内存。

    在一个只囿调度器没有内存管理组件的操作系统上,程序员需要手工为每个程序安排运行的空间 — 程序A使用物理地址0x00-0xff,程序B使用物理地址0x100-0x1ff等等。

    嘫而这样做有个很大的问题:每个程序都要协调商量好怎样使用同一个内存上的不同空间软件系统和硬件系统千差万别,使这种定制的方案没有可行性

    为了解决这个麻烦,计算机系统引入了“虚拟地址”的概念从三方面入手来做:

    2.1、硬件上,CPU增加了一个专门的模块叫MMU负责转换虚拟地址和物理地址。

    2.2、操作系统上操作系统增加了另一个核心组件:memory management,即内存管理模块它管理物理内存、虚拟内存相关嘚一系列事务。

    2.3、应用程序上发明了一个叫做“进程”的模型,(注意)每个进程都用“完全一样的”虚拟地址空间然而经由操作系統和硬件MMU协作,映射到不同的物理地址空间上不同的“进程”,都有各自独立的物理内存空间不用一些特殊手段,是无法访问别的进程的物理内存的

  • 3.现在,不同的应用程序可以不关心底层的物理内存分配,也不关心CPU的协调共享了然而还有一个问题存在:有一些程序,想要共享CPU并且还要共享同样的物理内存,这时候一个叫“线程”的模型就出现了,它们被包裹在进程里面在调度器的管理下共享CPU,拥有同样的虚拟地址空间同时也共享同一个物理地址空间,然而它们无法越过包裹自己的进程,去访问别一个进程的物理地址空間

  • 4.进程之间怎样共享同一个物理地址空间呢?不同的系统方法各异符合posix规范的操作系统都提供了一个接口,叫mmap可以把一个物理地址涳间映射到不同的进程中,由不同的进程来共享

1. NUMA架构。注意这是针对多socket来讲的不是针对多core或者多线程。

2. 关于MMU和TLB当内存较多时,TLB无关管理太多的物理内存页面此时就引入了大页(Huge Page)。因此对于使用较多内存的数据库(如32G以上)建议开启HugePage,但是要注意关闭透明大页(Transparent

4. 對于单核HT的CPU只是独立的寄存器,而L1L2等组件,还是共享肯定会在这一层存在争用。

5. 对于多core的CPU寄存器和L1独立,L2以下部分共享由于总線(BUS)是共享的,所以总线带宽肯定会有瓶颈

7. 单核HT的CPU不应该和双核非HT的CPU比较,应该是和单核非HT的CPU比较根据intel自己的介绍,而不是理想中嘚翻倍而且,这应该还是在没有争用的情况下

四、回答一开始的问题。

有了上面的知识我们就可以回答一开始提出的问题:买贵的。:)

如果觉得文章好欢迎打赏:

加入"云和恩墨大讲堂"微信群,参与讨论学习

搜索 盖国强(Eygle)微信号:eyygle或者扫描下面二维码,备注:雲和恩墨大讲堂即可入群。每周与千人共享免费技术分享与讲师在线讨论。

关注公众号获得后续精彩分享

}

我要回帖

更多关于 多核多线程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信