用 WASM+WebGL 实现 Switch、PS3 模拟器难点在哪里?桌面版模拟器已经很成熟了,看油管博主评测最新款 Switch 的 GPU 性能都比不过连三年前的低端手机,算上耗损也够在 M2 iPad Pro 上运行吧? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX    程序员

用 WASM+WebGL 实现 Switch、PS3 模拟器难点在哪里?桌面版模拟器已经很成熟了,看油管博主评测最新款 Switch 的 GPU 性能都比不过连三年前的低端手机,算上耗损也够在 M2 iPad Pro 上运行吧?

  •  2
     
  •   drymonfidelia 2024-02-19 22:29:37 +08:00 3527 次点击
    这是一个创建于 606 天前的主题,其中的信息可能已经有所发展或是发生改变。
    跑在 Safari on iPad 里的 Switch 一定很酷
    16 条回复    2024-02-21 10:10:16 +08:00
    Kumo31
        1
    Kumo31  
       2024-02-19 22:59:36 +08:00   2
    当初本科毕设开题时也想过类似的点子,但据我所知... 模拟器要达到可用级别的性能,纯软件模拟基本上是完全行不通的(除非是 Gameboy 级别的老古董),要在本地直接执行目标指令才能基本无损耗,跨架构就要 JIT 做这个操作,这意味着你需要将动态地将指令的内存区域设置为可执行的,然后让 CPU 去直接执行它,GPU 的实现就更复杂了。而浏览器提供的接口是无法支持这样的底层操作的,就算是 native 的实现,iOS/iPadOS 对内存权限管理也很严格,难以实现 JIT
    0o0O0o0O0o
        2
    0o0O0o0O0o  
       2024-02-19 23:03:43 +08:00 via iPhone
    misdake
        3
    misdake  
       2024-02-19 23:14:08 +08:00
    cpu 代码动态编译成 wasm 也许可以搞,gpu 不太好模拟,webgpu 好好用起来带上 workaround 也许勉强够
    ShadowPower
        4
    ShadowPower  
       2024-02-19 23:25:53 +08:00
    除了#1 提到的那些以外,其实 WASM 有内存大小限制。过去只有 2GB ,现在也只有 4GB 。对于 Switch 模拟器来说,不够用。
    drymonfidelia
        5
    drymonfidelia  
    OP
       2024-02-19 23:28:23 +08:00
    @ShadowPower 最新款 Switch 也只有 4GB 内存
    jhdxr
        6
    jhdxr  
       2024-02-20 00:45:48 +08:00
    @drymonfidelia 你不太可能只用 4G 内存去模拟 4G 内存
    ShadowPower
        7
    ShadowPower  
       2024-02-20 00:53:34 +08:00
    @drymonfidelia 无 Swap 无 ZRAM 的设备,跑安卓版 Yuzu ,开 NCE 模式(不用翻译指令集,不过着色器还是需要编译+缓存),玩一些主流 Switch 游戏,一段时间之后 Yuzu 本体的内存占用可以达到 7GB 。
    现在需要这玩意在整个 Wasm Runtime 里跑,而且只给 4GB 内存,跑的还不是原生代码,而是 WASM 的 IL……
    levelworm
        8
    levelworm  
       2024-02-20 08:22:05 +08:00 via Android
    @Kumo31 请教一下,fgpa 是不是一个思路?虽然目前比较火的 mister 其实就是软模拟的硬件复现。
    murmur
        9
    murmur  
       2024-02-20 08:37:57 +08:00   1
    @levelworm fpga 不用于这个场景,行业领域用的比较多,首先专有电路逆向可比软件逆向难多了,定制起来性能是超过同级别通用 cpu 的,但是得定制好

    然后 fpga 的成本肯定比不上大规模生产的芯片
    JeffreyZhuang
        10
    JeffreyZhuang  
       2024-02-20 11:36:25 +08:00
    别太看得起 wasm 和 webgl 的性能,跟原生应用有数量级上的差距。
    模拟本身也有很大的损耗。
    组合拳下来,switch 上的 3D 游戏带不动了。
    lonewolfakela
        11
    lonewolfakela  
       2024-02-20 11:42:39 +08:00
    switch 还有点希望,PS3 那个奇葩架构的模拟性能损耗能上天,还是别指望用网页端的技术实现了。
    beginor
        12
    beginor  
       2024-02-20 11:59:53 +08:00 via Android
    这是打算在浏览器加载 10 多 G 的游戏文件么?
    icyalala
        13
    icyalala  
       2024-02-20 12:13:37 +08:00
    WASM 性能只有 Native 的 1/2 到 1/3 ,再加上指令集不同,CPU 执行性能会非常差。GPU 指令差的就更多了。
    drymonfidelia
        14
    drymonfidelia  
    OP
       2024-02-20 14:29:14 +08:00
    @beginor 浏览器加载 10 多 G 的游戏文件应该是最简单的,YouTube 会员的离线缓存功能就把视频加密下载在浏览器 IndexedDB ,存 200GB 都可以,没有上限
    qq316107934
        15
    qq316107934  
       2024-02-20 15:10:31 +08:00
    @drymonfidelia #14 储存在硬盘内顺序读取,和内存内随机按址读取, 速度不是一个概念。顺便一提受 V8 引擎限制 WASM 内存上限 2GB ,有些浏览器最多 4GB 。
    cubecube
        16
    cubecube  
       2024-02-21 10:10:16 +08:00
    web 的 GPU 性能太差呀,图片多的网站拉动都卡,更别说要 60hz 跑 3D 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2811 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:29 PVG 14:29 LAX 23:29 JFK 02:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86