请问电脑运行大型游戏,CPU负责什么工作?

  • 雷之
    处理傻瓜AINPC啊
  • J
    JimmyZ
    就是没多少事, 你看游戏机的CPU都不强.
  • J
    JimmyZ
    一般来说, 因为写得烂?
  • B
    BallanceHZ
    所谓的显卡决定最高帧,cpu决定最低帧?以及主机的弱爆cpu是主机游戏30帧遍地的主因啊
  • L
    Lunamos
    CPU负担所有图形以外的计算。主要是两部分。
    一部分是计算GPU所需的帧数据进行渲染,包括模型动画纹理的loading和parsing(以及解压缩),宏观物理(仿真物理还是GPU做),场景空间数据结构的生成和遍历,简单说就是做GPU的“喂食者”,把所有该帧要使用的矩阵、顶点和纹理准备好,为GPU的计算扫清障碍。绝地求生里所有其他玩家的位置、模型和动作帧的计算以及网络通信,其他玩家发射的每颗子弹在场景里计算求交,判断击中何人的什么位置,游戏逻辑做何应对。

    另一部分是游戏本身的数值逻辑,以P社游戏和文明为代表的大量策略、仿真、模拟经营等等逻辑至上的游戏,需要计算大量单位互相之间的实时数值模型。比如星际争霸里计算400条狗对100只毒爆虫,每只毒爆虫爆炸以后的最近邻搜索判断,每条狗在地图的NavMesh上的A*寻路路径,友军阵型保持的检测友方碰撞以后如何更新位置等等,游戏中的敌人AI脚本的运行等也属于此。
  • 万千百十
    P社游戏,CPU忙到自爆
  • B
    BallanceHZ
    cpu0和1忙到自爆,别的闲到自爆吗
  • J
    JimmyZ
    说真的, 那种规模的数值计算, 对现代CPU根本屁都不算, 如果因此造成CPU需求高的话, 可能这部分逻辑是用Lua之类流行的游戏内嵌脚本语言处理的导致效率低下.

    仅为猜测.
  • l
    lostyzd
    lua已经算比较快的了,python才是一个天坑
  • e
    endrollex
    数值计算啊,比如网游,人多就吃CPU
    3D里有部分也是要CPU的,DirectXMath
  • k
    kal_008
    怎么说呢,拿光荣的无双举例
    全特效同屏人数开少,电脑不卡,改成同屏人数多,电脑卡,说明要升级cpu
    低特效同屏人数开多,电脑不卡,改成高特效,电脑卡,说明要升级gpu
  • J
    JimmyZ
    楼上的两个例子都不太好, 如果同屏的人数多了, GPU的需求也会跟着提升.
  • 月夜凝雪
    你这个问题等于是说高强度运动的时候心脏负责什么工作
  • n
    narizen
    那么玩模拟器游戏时为什么特别吃cpu?
  • J
    JimmyZ
    这是完全不相关的问题, 因为架构不同, 不可能用300MHz的x86去模拟300MHz的MIPS, 一般认为得十倍起.
  • s
    sjbssd
    CPU还有一个功能就是从硬盘解码读取贴图数据然后载入到显存里面让显卡运算。所以场景里面模型多贴图多的时候就需要CPU读取速度快一点,不然在很多即时渲染的游戏里面会因为cpu来不及读取贴图而出现显示bug,具体表现为场景建模全部是粗模多面体。
  • s
    sjbssd
    模拟器游戏吃cpu主要是在不停地转换游戏的代码,也就是在游戏内容解码的环节要消耗大量资源。有的开发不完全的模拟器甚至让cpu承担部分显卡的绘图工作,比如早期的3ds模拟器。
  • s
    seraph0722
    杂兵OL我记得当年刚出来时候被人发现是个能充分调动CPU,让显卡得以“休养生息”的人性化游戏。。?
  • J
    JimmyZ
    软GPU模拟可不是"开发不完全", 而且很多时候是为了精确, 硬GPU模拟不见得一定比软GPU模拟难.
  • C
    ChirstDR
    你说python,我大EVE不服啊
  • L
    Lunamos
    因为模拟器实质上是在用CPU的串行执行系统在模拟一个并行的系统。

    比如说,FC的6502CPU的一条指令,从指令缓存读取以后只需要一个(或数个)时钟(总线)周期就可以完成(6502没有流水线)。而如果用CPU模拟这条指令,需要在内存中设置这条指令的数据通路上的寄存器作为变量,每个变量根据相应门电路电平设置位判断进行多路选择。其一条指令很可能需要多次内存存取,数十个CPU计算指令才能完成。而人家的数据早就传到PPU进行处理了,PPU也是几个时钟周期就把Sprite的状态计算出来了,这边还得加载PPU的类对象,在里面执行PPU里的逻辑,设置的sprite还是内存里的一个array,还得用循环一个一个改。
    当然具体模拟器实现也会有很多优化,不过用通用CPU/RAM系统模拟一个专用高耦合系统总是会有性能问题。
  • J
    JimmyZ
    以前的机种是那样, 比较现代的比如RPCS3那种HLE就好很多, 没看代码, 不过听说PS3上的线程会用真线程模拟.
  • s
    sjbssd
    这个还是开发不足吧?不然怎么解释很多模拟器后期都添加的gpu加速功能?

    -- 来自 有消息提醒的 Stage1官方 Android客户端
  • J
    JimmyZ
    ePSXe 2.0加了个新的重写的软GPU, Mednafen也是只有软GPU模拟, 别以偏概全.

    2D时代更是基本只能用CPU模拟,IIRC没谁写过Tile模式的硬GPU模拟. 这可不是"开发不完全".
  • L
    Lunamos
    HLE就是黑盒,效率高一些但游戏很难完美。
  • J
    JimmyZ
    不HLE的话PS2以后就不可能了.

    另一方面, 我猜比较现代的游戏机上游戏是在OS上跑而不是在裸硬件上跑的所以HLE引发的问题不会像以前那么多吧, Citra/CEMU/RPCS3都在这么短时间就取得这样的兼容性, 我觉得能说明一些问题.
  • s
    sjbssd
    就是在说3d游戏嘛,2d游戏基本上都用不上显卡出手的。
  • J
    JimmyZ
    你前面可没说3D, 也别忽略我举的两个例子.
  • l
    lostyzd
    eve我记得应该是用了python的一个变种,stackless python,不过能用python写这么大工程还是很值得佩服的。
  • 萱时令
    现在还有个需要CPU大量计算资源的功能是运行加密系统
    代表就是刚发售的起源 额外的占用可能达到30%以上

    — from OnePlus ONEPLUS A3010, Android 8.0.0 ofS1 Next Goosev1.3.2.1-play
  • 健步如飞麦克雷
    好像是p社四萌的祖传引擎不支持多核运算
  • J
    JimmyZ
    那点规模单核也不算屁, 我还是猜用的内嵌脚本引擎.
  • すぴぱら
    前一阵做了个日厂avg外包。
    大部分cpu时间都浪费在了资源解压读取,go频繁销毁,超大贴图显示,傻屌gc。
    嗯,这还是个文字游戏,优化几个月都满不了全程60帧。
    你们感受一下大型游戏资源和逻辑更复杂的时候是个什么屌样子。
    我们这还纯c#实现呢,要是走自定义脚本引擎,解析效率直接爆炸没商量。


    —— 来自 Xiaomi MI 5, Android 7.0上的S1Next-鹅版v1.3.2.1
  • C
    Cazad0r
  • h
    hanyuwei70
  • v
    void__
    资源调度

    网络同步

    逻辑代数

    最主要就这些吧
  • s
    sjbssd
    日本人代码水平真的好烂,那你们有给他优化吗
  • i
    itzpapalotl
    那你高估了现代CPU的运算能力
    多个对象交互实时影响,哪怕只是简单的经典力学这么简单线性的运算都能轻易搞死CPU

    -- 来自 能手机投票的 Stage1官方 iOS客户端
  • 红香点嫩色
    遇到体系结构聚聚了就不卖弄了。。。
  • m
    macos
    cpu是首选处理设备,所有任务经过他进行调度,显卡能直接渲染图像也是支持了一系列api后才达成的,准确的说属于特定数据的加速设备,如果有不支持的情况很可能会打回给cpu处理,cpu通常设计的能处理通用的任务,对特定任务加速肯定跑不过同期显卡声卡之类的
  • 笛诺斯
    借楼提问,将来要玩骑砍2的时候百人同屏,千人同屏是不是需要很好的CPU?

    -- 来自 有消息提醒的 Stage1官方 Android客户端
  • l
    liuyuan23
    话说问这种问题需要到游戏论坛吗,百度一下或者找个程序员朋友了解下最好
  • w
    waterstars
    我觉得你需要很好的一切
  • J
    JimmyZ
    扯太远了, P社四萌并不搞物理模拟.