Re: [求助] pcsx2 out of memory的問題

看板Emulator (模擬器)作者 (Planck超帥)時間11年前 (2015/05/09 00:06), 編輯推噓8(801)
留言9則, 9人參與, 最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/Emulator/M.1431101208.A.EF0.html

05/09 00:09, , 1F
好文!
05/09 00:09, 1F

05/09 00:47, , 2F
好文!
05/09 00:47, 2F

05/09 02:15, , 3F
好文! (不跟著推人家以為我看不懂XD)
05/09 02:15, 3F

05/09 04:24, , 4F
專業推
05/09 04:24, 4F

05/09 15:09, , 5F
推!
05/09 15:09, 5F

05/09 19:02, , 6F
05/09 19:02, 6F

05/11 20:15, , 7F
專業好文推!
05/11 20:15, 7F

05/12 11:18, , 8F
專業推一個 ^^
05/12 11:18, 8F

04/23 08:58, , 9F
推!淺顯易懂!
04/23 08:58, 9F
文章代碼(AID): #1LJDyOxm (Emulator)
討論串 (同標題文章)
文章代碼(AID): #1LJDyOxm (Emulator)