V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  程序员

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

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

    然后 fpga 的成本肯定比不上大规模生产的芯片
    JeffreyZhuang
        10
    JeffreyZhuang  
       279 天前
    别太看得起 wasm 和 webgl 的性能,跟原生应用有数量级上的差距。
    模拟本身也有很大的损耗。
    组合拳下来,switch 上的 3D 游戏带不动了。
    lonewolfakela
        11
    lonewolfakela  
       279 天前
    switch 还有点希望,PS3 那个奇葩架构的模拟性能损耗能上天,还是别指望用网页端的技术实现了。
    beginor
        12
    beginor  
       279 天前 via Android
    这是打算在浏览器加载 10 多 G 的游戏文件么?
    icyalala
        13
    icyalala  
       279 天前
    WASM 性能只有 Native 的 1/2 到 1/3 ,再加上指令集不同,CPU 执行性能会非常差。GPU 指令差的就更多了。
    drymonfidelia
        14
    drymonfidelia  
    OP
       279 天前
    @beginor 浏览器加载 10 多 G 的游戏文件应该是最简单的,YouTube 会员的离线缓存功能就把视频加密下载在浏览器 IndexedDB ,存 200GB 都可以,没有上限
    qq316107934
        15
    qq316107934  
       279 天前
    @drymonfidelia #14 储存在硬盘内顺序读取,和内存内随机按址读取, 速度不是一个概念。顺便一提受 V8 引擎限制 WASM 内存上限 2GB ,有些浏览器最多 4GB 。
    cubecube
        16
    cubecube  
       278 天前
    web 的 GPU 性能太差呀,图片多的网站拉动都卡,更别说要 60hz 跑 3D 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:08 · PVG 19:08 · LAX 03:08 · JFK 06:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.