pcsx2 out of memory的問題 - 模擬器
By Megan
at 2015-05-09T00:06
at 2015-05-09T00:06
Table of Contents
※ 引述《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
--
: 我的系統是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
--
Tags:
模擬器
All Comments
By Eartha
at 2015-05-10T15:00
at 2015-05-10T15:00
By Harry
at 2015-05-13T07:51
at 2015-05-13T07:51
By Frederica
at 2015-05-14T10:45
at 2015-05-14T10:45
By Edward Lewis
at 2015-05-16T14:15
at 2015-05-16T14:15
By Una
at 2015-05-17T09:35
at 2015-05-17T09:35
By David
at 2015-05-21T23:38
at 2015-05-21T23:38
By Thomas
at 2015-05-23T09:52
at 2015-05-23T09:52
By Valerie
at 2015-05-28T08:34
at 2015-05-28T08:34
By Callum
at 2015-05-29T06:02
at 2015-05-29T06:02
Related Posts
最終幻想12漢化版更新補丁1.01
By Kama
at 2015-05-08T04:52
at 2015-05-08T04:52
為什麼別人快打旋風總是贏你?來看看高手
By Delia
at 2015-05-07T17:55
at 2015-05-07T17:55
(WIP) New PS2 Emulator attempt
By Sierra Rose
at 2015-05-06T21:26
at 2015-05-06T21:26
冠軍不純! 網友諷梅威瑟「只會躲貓貓」
By Edith
at 2015-05-06T16:00
at 2015-05-06T16:00
MAME 0.161 ROMs (7Zip-Merged)
By Daph Bay
at 2015-05-05T22:16
at 2015-05-05T22:16