Board logo

标题: 通俗地科普下为啥模拟器这么耗性能 [打印本页]

作者: 來福時代    时间: 2023-5-8 16:12     标题: 通俗地科普下为啥模拟器这么耗性能

posted by wap, platform: Chrome
用模拟器来模拟各种游戏机硬件,模拟器实际输出的性能可以理解为一个特殊的木桶原理,就是永远受到一些短板限制,这些短板就是被模拟的游戏机硬件的一些细节规格

特殊就特殊在不能因为pc更强大的性能就让模拟器将这些短板改长,因为和目标硬件规格不一致的话,比如模拟器把游戏机cpu频率改更快,会出现各种不兼容问题以至游戏不能玩甚至崩溃

如果你的pc性能比游戏机高,但是模拟器跑出来效果不如游戏机,那其中一个大原因就是你的pc模拟这些短板的性能不如游戏机实际规格

所以前期只能用简单粗暴的方法,就是用强大得多的pc硬件性能来使木桶整体板长拉伸,其中就包括最短的那块板,这样才能让被模拟的最短那块板达到甚至超过游戏机规格,所以也不奇怪cpu占用率不高但是模拟性能上不去,就是木桶效应

后期如果要优化需要花费大量功夫研究怎么通过各种hack把短板拉长而不会打破兼容性,甚至出单个游戏的专用模拟器而不用理会其他游戏的兼容性,这就需要很多时间了
作者: alexey    时间: 2023-5-8 16:58

玩模拟器重要的就是得沉得住气,等模拟的目标主机至少变成上上一代机器,届时的中价pc也能模拟得很爽了再玩,否则性价比并不高
作者: aadf    时间: 2023-5-8 18:24

posted by wap, platform: Chrome
这两天偷跑哪个感觉模拟器畅玩还得花点时间,先ns玩吧
作者: yang_yii    时间: 2023-5-8 18:39

posted by wap, platform: MAC OS X
核心原因是指令集不一样。
比如游戏机一个绘图指令,游戏机可能是硬件实现,速度开销忽略不计。但是pc没有这个硬件实现,需要用软件来模拟,比如用opengl的n条指令组合起来达成一样的效果,开销就上去了。

因为游戏rom几乎是不可修改的(无法重新编译),所以优化方向只有两个方式。
要么优化游戏机各种指令的模拟实现,比如早期开发人员用10条pc指令实现某个游戏机指令,后期开发人员可能发现可以优化成3条。这就大大提升模拟器效率了。
要么就是直接硬件性能提升,抹平模拟的开销。
作者: 性感枪手    时间: 2023-5-8 18:52

对呀,看一群人和模拟器较劲不累么?先玩玩ns版享受游戏乐趣,过几年模拟器成熟了无脑下个整合包体会下高画质,不好么?
作者: sailor    时间: 2023-5-8 18:53

posted by wap, platform: Android
模拟器最实用的地方是金手指功能与即时存取档
作者: 熊熊哥哥    时间: 2023-5-8 18:54

posted by wap, platform: Samsung
搞了半天模拟器放弃了,先用ns玩,模拟器等完美傻瓜包。
作者: yfl2    时间: 2023-5-8 20:19

引用:
原帖由 sailor 于 2023-5-8 18:53 发表
posted by wap, platform: Android
模拟器最实用的地方是金手指功能与即时存取档
新主机的似乎很少支持即时存档
作者: fvdllf    时间: 2023-5-8 20:31

SS的模拟是最费力的吧?好像十多年以后才可以
作者: SSforME    时间: 2023-5-8 20:37

模拟器效率低下的根本原因是没有足够详细的硬件文档
很多游戏用了特殊的硬件trick
模拟器往往实现错误或者只能低效实现
还有系统软件底层的细节也必须实现,但很困难
最著名的就是微软dx
比如dc的wince游戏和xbox一代上的dx

所以老任的主机最容易模拟的很好
老任系统最简单
哪怕是同时代性能较强的n64和ngc模拟度都很高

sony系统一般也比较简单或者基于linux
都还好处理

微软的主机没有一个模拟度高的
哪怕是基于pc架构

作者: SSforME    时间: 2023-5-8 20:40

引用:
原帖由 fvdllf 于 2023-5-8 20:31 发表
SS的模拟是最费力的吧?好像十多年以后才可以
了解一下xbox的模拟
早期的cassini和ssf模拟度就很高的
只是需要高性能pc

作者: Search    时间: 2023-5-8 21:43

引用:
原帖由 SSforME 于 2023-5-8 20:37 发表
模拟器效率低下的根本原因是没有足够详细的硬件文档
很多游戏用了特殊的硬件trick
模拟器往往实现错误或者只能低效实现
还有系统软件底层的细节也必须实现,但很困难
最著名的就是微软dx
比如dc的wince游戏和xb ...
微软的主机连被说成最像pc的初代xbox都无法解决模拟问题!

有一说是法律问题........敢碰的人少....
作者: SSforME    时间: 2023-5-8 22:26

引用:
原帖由 Search 于 2023-5-8 21:43 发表



微软的主机连被说成最像pc的初代xbox都无法解决模拟问题!

有一说是法律问题........敢碰的人少....
模拟器是合法的
bios和游戏是非法的
作者: AzureZH    时间: 2023-5-8 22:39

posted by wap, platform: iPhone
最牛的还是GBA模拟器,实机都没发售就出了
作者: MacPhisto    时间: 2023-5-8 23:25

posted by wap, platform: Chrome
短板问题,适用于ps3以及之前的时代。那时的主机硬件确实是异构的,非对称的设计

从ps4起,包括switch,都已经是典型的pc架构了(cpu+gpu+ram)。不存在什么特殊的设计

甚至现在可以反过来说,pc才是异构的(大小核)。主机反而是对称设计(switch虽然是4大4小,但4小核是屏蔽的)
作者: MacPhisto    时间: 2023-5-8 23:27

posted by wap, platform: Chrome
模拟器耗性能的根本原因,1是文档不全,只能逆向工程

2是cpu gpu都需要转译。无论是jit还是aot

可以参考苹果自家的rosetta 2。即使苹果掌握了自家的所有设计文档,把x86转译为arm也还是有巨大的性能损耗
作者: Epilogue    时间: 2023-5-9 00:21

posted by wap, platform: Android
引用:
原帖由 @MacPhisto  于 2023-5-8 23:25 发表
短板问题,适用于ps3以及之前的时代。那时的主机硬件确实是异构的,非对称的设计

从ps4起,包括switch,都已经是典型的pc架构了(cpu+gpu+ram)。不存在什么特殊的设计

甚至现在可以反过来说,pc才是异构的(大小核)。主机反而是对称设计(switch虽然是4大4小,但4小核是屏蔽的)
大小核那是英特尔,你搞的amd不做cpu一样。
作者: MacPhisto    时间: 2023-5-9 00:49

posted by wap, platform: Chrome
引用:
原帖由 @Epilogue  于 2023-5-9 00:21 发表
大小核那是英特尔,你搞的amd不做cpu一样。
amd也要上大小核了
作者: ko81e24wy-1    时间: 2023-5-10 21:44

初代XBOX模拟器完成度其实挺高的了,配套的初代XBOX LIVE都有了,不过这是基于qumu虚拟机的LLE型模拟器,对CPU要求奇高。
作者: 燕市游徒    时间: 2023-5-11 06:28

以前看过个介绍,好像是想模拟1G内核的游戏机的CPU性能,需要大概100G性能的电脑CPU动力,大概是1:100这么个意思

另外现在的高端游戏机种模拟器都用了HLE显卡硬件核心加速技术,用电脑显卡硬件模拟游戏机显卡

假如纯用软件技术精确模拟游戏机显卡硬件的话,几百G的cpu都不够用的

[ 本帖最后由 燕市游徒 于 2023-5-11 06:31 编辑 ]
作者: 來福時代    时间: 2023-5-11 17:13

posted by wap, platform: Chrome
引用:
原帖由 @MacPhisto  于 2023-5-8 23:25 发表
短板问题,适用于ps3以及之前的时代。那时的主机硬件确实是异构的,非对称的设计

从ps4起,包括switch,都已经是典型的pc架构了(cpu+gpu+ram)。不存在什么特殊的设计

甚至现在可以反过来说,pc才是异构的(大小核)。主机反而是对称设计(switch虽然是4大4小,但4小核是屏蔽的)
你对硬件的理解还是太浅

只要一天有模拟器这东西的存在,就有模拟短板问题

将模拟器的运算处理比如成一整条流水线,用PC硬件模拟99.99%的游戏机运算都比实机快10倍,但是只要有0.01%比实机慢,全流水线就得等它

这些短板可以是指令级粒度的,电平信号级粒度的
作者: xfry    时间: 2023-5-11 18:57

没官方硬件文件是关键,逆向工程永远达不到官方模拟器的效果
作者: xfry    时间: 2023-5-11 19:04

对了,我听说模拟器都是吃CPU的,为什么看另一帖里都在讨论显卡,NS模拟器吃显卡?
作者: SSforME    时间: 2023-5-11 21:38

引用:
原帖由 xfry 于 2023-5-11 19:04 发表
对了,我听说模拟器都是吃CPU的,为什么看另一帖里都在讨论显卡,NS模拟器吃显卡?
hle模拟gpu的方式都吃显卡

hle模拟gpu本质上是二进制显卡api转换
作者: yfl2    时间: 2023-5-11 22:16

posted by wap, platform: Android
hle 反而不吃显卡,因为只是api 层级模拟
作者: MacPhisto    时间: 2023-5-12 00:33

posted by wap, platform: Chrome
引用:
原帖由 @來福時代  于 2023-5-11 17:13 发表
你对硬件的理解还是太浅

只要一天有模拟器这东西的存在,就有模拟短板问题

将模拟器的运算处理比如成一整条流水线,用PC硬件模拟99.99%的游戏机运算都比实机快10倍,但是只要有0.01%比实机慢,全流水线就得等它

这些短板可以是指令级粒度的,电平信号级粒度的
游戏机模拟器不需要考虑到这么细的粒度,毕竟目的是在pc上跑游戏,而不是100%模拟游戏机硬件

其实模拟器的障碍是 1 缺乏官方文档  2 无利可图。如果看索尼 任天堂官方的模拟器,效果效率都是很不错的
作者: SSforME    时间: 2023-5-12 15:50

引用:
原帖由 yfl2 于 2023-5-11 22:16 发表
posted by wap, platform: Android
hle 反而不吃显卡,因为只是api 层级模拟
真是啥都不懂
api转换,最终渲染都是gpu硬件完成
所以叫做硬件或者高阶模拟

lle或者软件模拟,渲染是由cpu完成,gpu只负责输出画面
不用api转换

gpu本身也有指令集和寄存器的
hle不模拟指令集和寄存器,只是把数据格式转换下送进pc端gpu
所以是api转换
怎么可能不吃显卡
现在n64级别和更高级别主机基本都用hle模拟
不然只能玩2d渲染的游戏

作者: SSforME    时间: 2023-5-12 15:52

引用:
原帖由 MacPhisto 于 2023-5-12 00:33 发表
posted by wap, platform: Chrome
游戏机模拟器不需要考虑到这么细的粒度,毕竟目的是在pc上跑游戏,而不是100%模拟游戏机硬件

其实模拟器的障碍是 1 缺乏官方文档  2 无利可图。如果看索尼 任天堂官方的模拟器, ...
官方的模拟器模拟度和流畅度不一定比民间的好
只是官方的是捆绑特定游戏的
模拟不好的游戏不拿出来卖就是了

作者: 爱猫咪的薛定谔    时间: 2023-5-12 15:56

posted by wap, platform: Android
引用:
原帖由 @SSforME  于 2023-5-12 07:50 发表
真是啥都不懂
api转换,最终渲染都是gpu硬件完成
所以叫做硬件或者高阶模拟

lle或者软件模拟,渲染是由cpu完成,gpu只负责输出画面
不用api转换

gpu本身也有指令集和寄存器的
hle不模拟指令集和寄存器,只是把数据格式转换下送进pc端gpu
所以是api转换
怎么可能不吃显卡
现在n64级别和更高级别主机基本都用hle模拟
不然只能玩2d渲染的游戏
同样调用显卡,hle 模式自然效率高,所以不吃显卡,只不过是让显卡参与模拟而已,你自己也知道如果不是hle, 甚至都跑不了

以wiiu 为例,hle 让模拟效率很高,所以不需要高性能gpu就可以很好模拟
作者: SSforME    时间: 2023-5-12 16:01

引用:
原帖由 爱猫咪的薛定谔 于 2023-5-12 15:56 发表
posted by wap, platform: Android
同样调用显卡,hle 模式自然效率高,所以不吃显卡,只不过是让显卡参与模拟而已,你自己也知道如果不是hle, 甚至都跑不了

以wiiu 为例,hle 让模拟效率很高,所以不需要高性能g ...
真是扯淡
显卡参与模拟,那当然要消耗显卡
显卡不参与模拟,就是输出画面
你说哪个吃显卡?

lle模拟跑不了是因为所有模拟都压在cpu上,cpu扛不住而已
你用垃圾核显跑wiiu试试
作者: 爱猫咪的薛定谔    时间: 2023-5-12 16:03

posted by wap, platform: Android
引用:
原帖由 @SSforME  于 2023-5-12 08:01 发表
真是扯淡
显卡参与模拟,那当然要消耗显卡
显卡不参与模拟,就是输出画面
你说哪个吃显卡?

lle模拟跑不了是因为所有模拟都压在cpu上,cpu扛不住而已
你用垃圾核显跑wiiu试试
所谓吃不吃,是指哪种模拟需要更多性能,既然你说非hle 甚至都无法正常模拟wiiu, 谈何它不吃gpu 呢,连跑起来的前提都没做到

另外,为啥lle 就不能用显卡来模拟主机的gpu ?

本帖最后由 爱猫咪的薛定谔 于 2023-5-12 08:13 通过手机版编辑
作者: SSforME    时间: 2023-5-12 16:33

引用:
原帖由 爱猫咪的薛定谔 于 2023-5-12 16:03 发表
posted by wap, platform: Android
所谓吃不吃,是指哪种模拟需要更多性能,既然你说非hle 甚至都无法正常模拟wiiu, 谈何它不吃gpu 呢,连跑起来的前提都没做到

另外,为啥lle 就不能用显卡来模拟主机的gpu ?

本 ...
lle如果用显卡来模拟主机gpu
那不就是hle嘛

lle模拟跑不起来,原因是只有cpu模拟主机gpu,pc显卡在打酱油
当然lle不吃显卡

对于用模拟器玩游戏的当然不能理解,既然lle都跑不起来,为啥还需要存在?
因为lle模拟精确度更高,这本身就有意义
换句话说,lle验证了任何计算机系统都可以由其他计算机系统完全精确模拟
因为理论上任何计算机系统都是相同的数学基础
没理由相同的数学基础不能相互转换吧

另外随着pc性能的增加,一些lle模拟的主机也可以完美运行了,比如sfc
作者: 爱猫咪的薛定谔    时间: 2023-5-12 17:24

posted by wap, platform: Android
引用:
原帖由 @SSforME  于 2023-5-12 08:33 发表
lle如果用显卡来模拟主机gpu
那不就是hle嘛

lle模拟跑不起来,原因是只有cpu模拟主机gpu,pc显卡在打酱油
当然lle不吃显卡

对于用模拟器玩游戏的当然不能理解,既然lle都跑不起来,为啥还需要存在?
因为lle模拟精确度更高,这本身就有意义
换句话说,lle验证了任何计算机系统都可以由其他计算机系统完全精确模拟
因为理论上任何计算机系统都是相同的数学基础
没理由相同的数学基础不能相互转换吧

另外随着pc性能的增加,一些lle模拟的主机也可以完美运行了,比如sfc
为啥显卡不能指令集 粒度 模拟主机gpu, 一定要CPU 做?
作者: SSforME    时间: 2023-5-12 19:27

引用:
原帖由 爱猫咪的薛定谔 于 2023-5-12 17:24 发表
posted by wap, platform: Android
为啥显卡不能指令集 粒度 模拟主机gpu, 一定要CPU 做?
你连pc显卡的工作原理都搞不懂
显卡的寄存器和显存并不是开发者可任意使用的
显卡的架构决定了它只能组团并行处理数据
显卡的指令集都不是公开的
甚至都没有汇编语言
曾经dx8.1和老opengl允许用显卡类汇编语言编写shader
但很快就淘汰
不如c风格比较容易
而且指令很少很有限


作者: SSforME    时间: 2023-5-12 19:36

顺便说一下cpu和gpu的区别
cpu是有数学计算和分支判断跳转指令的
但是gpu只有数学计算指令

而模拟解析指令集必须要有分支判断跳转
所以gpu干不了这活
数学计算只需要把固定格式数据喂给gpu,然后返回结果就行
所以gpu不用关心指令集寄存器啥的
只需要api传数据就行

所以gpu参与模拟只能api转换
作者: xfry    时间: 2023-5-12 21:38

引用:
原帖由 SSforME 于 2023-5-11 21:38 发表

hle模拟gpu的方式都吃显卡

hle模拟gpu本质上是二进制显卡api转换
刚验证了一下,专门下载了个Switch模拟器和野炊,用亮机卡试了下果然跑起来好卡,妈的一直以为模拟器都是靠CPU的233

PS:插回显卡重新打开野炊,一开头就感觉不对劲,这林克的速度好快,比印象里速度快多了,后来发现这模拟器还能调节游戏运行速度,土鳖如我第一次接触Switch模拟器,被深深震撼了,现在的模拟器都这么NB的么,怪不得坛里好多人都不玩实机了233
作者: cynic0522    时间: 2023-5-12 22:11

posted by 论坛助手, platform: iPhone
模拟器吃CPU或者说只吃CPU都是老黄历了。

ns模拟器能吃干22g以上显存(这个倒不是很必要),显卡占用偶发能上80+。
作者: jianghutong    时间: 2023-5-12 23:28

posted by wap, platform: iPhone
現在3DS都沒完美模擬吧




欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/) Powered by Discuz! 6.0.0