作者abac1230 (Planck超帅)
看板Emulator
标题Re: [求助] pcsx2 out of memory的问题
时间Sat May 9 00:06:45 2015
※ 引述《iotohy (随身听)》之铭言:
: 我的系统是win7 64 bit 旗舰版 + 8G memory
: 游戏是实况野球大联盟3,不过我想实况野球系列都应该有这问题,
: 遇到这个问题我爬了很多文, 还是没法解决,
: 不过我有发现几个有帮助的现象,能让我避掉out of memory.
: 1.
: 使用0.97到最新的1.3.1试过任何设定都会出现out of memory,
: 0.96则是黑画面,0.97是最稳的
这代表新版本PCSX2的修正或运算法,是不适合你所玩的游戏。
: 2.
: 用资源监视器观察pcsx2主程式记忆体的变化,
: 会发现很快的增大,一开始是200MB左右,当增大到1.4G~1.6G时
: 就会出现out of memory或pcsx2程式当机,
: 即使你可用记忆体还很充足,也是会当(後来我加到16G,一样out of memory)
因为那是游戏本身与模拟器相容性的问题。
: 3.pcsx2当增大到1.4~1.6G时,做即时存取或读取会出现分配记忆体失败的错误讯息,
: 如果用1.2.1版会很容易搞烂即时存档,0.97也是会但比较不会弄坏存档
Save state实际上会把所有目前使用的记忆体区块作备份。
所以存档会坏掉很正常。
: 4.正常不会out of memory的游戏,不会有记忆体增大现象,
: 会定期释放记忆体,保持在200~300MB左右
因为正常的游戏不会让PCSX2出现Memory leak。
: 避掉方法:
: 开资源监视器观察,如果pcsx2占用到达1.2G差不多就要out of memory的时候,
: 这时你可以重新设定图型插件(不用改值,只要确认OK就好),或是关掉重开pcsx2,
: 他会reset memory到占用200MB的状态,平均约每打一场就要做一次这个动作...XD
: 感觉问题应该不难解,因为记忆体占用莫名增大的现象是可稳定复制并观察,
: 而且就算抓不到原因,只要挂个watch dog侦测到这现象,做reset的动作就可避掉.
: 目前不知有没有人有更好的解决方式?
简单的说,若PCSX2会出现out of memoery的问题。
有99%几乎都是游戏本身的相容性有问题。
大部份都是因为这些特定游戏,在PCSX2模拟器的运算中会让EE或GS算出来的数值溢位,
结果就是导致memory leak,记忆体被占着不放、愈吃愈多。
最後就整个PCSX2 Crash掉。
至於少部份的PCSX2版本之间,对特定游戏的相容性有差异,
甚至旧版的相容性还比新版好。
则是因为PCSX2的EE与GS的算法,在0.9.6、0.9.7、0.9.8及之後的1.0版之间,
都有好几次大幅的变动。
例如0.9.8与0.9.6关於VU的程式码的部份,几乎整个被重新改写过。
所以会出现这样的情况也很非常正常的事。 :)
然而out of memory解决方法无他,
只能将会出错的游戏以及log回报给PCSX2开发群。
并不抱期待的等待开发者修正。
注1:
EE: Emotion Engine
PS2的CPU。
注2:
GS: Graphics Synthesizer
PS2的GPU。
注3:
micro VU: 由cottonvibes为首所开发的动态编译器(dynamic recompiler),
用来取代旧的super VU。
这项工作的目的,是由於PS2机器本身的指令,对电脑来说无法理解也无法直接沟通。
所以需要有直译器(interpreter),将PS2原始的指令码转换成电脑主机可以执行的代码。
但直译器的功能很简单,就是一个口令,一个动作的方式在运作着。
只不过若依照原始主机的指令,一个接着一个,将指令慢慢拆解成电脑可以执行的指令码
这样子做的效率很差且速度太慢。
所以动态编译器的方式,改善了直译器的缺点。
它会预先将一大堆PS2原生的指令转译成电脑可以执行的代码,并储存在记忆体之中,
当实际游戏运作的时候,当某个指令要被要被执行的当下,
模拟器就会预先读取原本储存在记忆体中的转译後的代码,并且执行它。
好处是这样做只要翻译一次就好,大幅提高效率。
坏处则就像不同国家的语言之间的翻译那样,信、雅、达很难完美。
当遇到有被模拟者(PS2)的指令与模拟者(电脑)的指令之间有落差,
那动态编译器的方式将有可能会放大这样的问题,
结果就是某几款游戏会有相容性的问题出现。
而Cottenvibes的贡献(Micro VU),就是将EE其中的一部分,或者可以说是VU的部分,
整个将代码改写成适合平行处理及管线化的方式。
最後才诞生了MTVU,让VU0与VU1跑不同的执行绪。
注4:
由於动态编译器的效率及优点,
通常几乎所有近代主机的模拟器,都存在着动态编译器的部份。
--
有图有真相
http://goo.gl/w3xULw
可惜之後变成这样
http://goo.gl/oDXbfw
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.168.176.168
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Emulator/M.1431101208.A.EF0.html
1F:推 jeff0811: 好文! 05/09 00:09
2F:推 reiden: 好文! 05/09 00:47
3F:→ TevenChen: 好文! (不跟着推人家以为我看不懂XD) 05/09 02:15
4F:推 hipposman: 专业推 05/09 04:24
5F:推 Jedidiah: 推! 05/09 15:09
6F:推 Jay915: 推 05/09 19:02
7F:推 conpo: 专业好文推! 05/11 20:15
8F:推 prudence: 专业推一个 ^^ 05/12 11:18
9F:推 chiz2: 推!浅显易懂! 04/23 08:58