• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

CPU 和 GPU 之间共享的 iOS 内存以及这对读取意味着什么

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:52:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 MTLBuffer 正在使用由 cpu 分配的内存,因此由 cpu 和 GPU 共享。

根据 Apple 的建议,我正在使用三重缓冲来消除可能由一个处理器等待另一个处理器完成而导致的延迟。

我的顶点数据每帧都会改变,所以每一帧我都用 CPU 写入数组的一个部分,用 GPU 读取不同的部分。

我想做的是读取 GPU 当前也在读取的一些值,因为它们节省了我一些时间来计算 CPU 正在写入的缓冲区部分。

本质上这是因为当前帧的数据依赖于先前帧的数据。

这有效吗?由于内存在 iOS 上是共享的,CPU 和 GPU 能否同时从同一部分内存中读取数据?



Best Answer-推荐答案


我认为这是有效且安全的,原因有两个。首先,CPU 实际上通常必须先读取才能写入。像缓存和内存总线这样的东西不允许以我们通常认为的粒度(字节甚至寄存器大小)访问 RAM。为了写入,它通常必须从内存中读取更大的 block ,只修改写入的部分,然后(最终)将更大的 block 写回内存。因此,即使您没有从 GPU 正在读取的部分缓冲区中显式读取,而您只写入 GPU 未访问的部分,理论上仍然可以从缓冲区的部分中隐式读取GPU 正在读取。由于我们没有获得可靠避免这种情况所需的信息,我认为这不被视为问题。

其次,没有警告您在 Apple 文档中描述的内容。有the "Maintaining Coherency Between CPU and GPU Memory" section在关于资源对象的文章中。这仅讨论了 CPU 或 GPU 正在修改共享数据的情况,而不是两者都只是读取的情况。

然后是 the "Resource Storage Modes and Device Memory Models" section描述 iOS 9 和 macOS 10.11 引入的新存储模式。以及 MTLResourceStorageModeShared 的文档本身。同样,这里提到了阅读与写作,但没有提到阅读与阅读。

如果同步阅读有问题,我想苹果会讨论的。

关于CPU 和 GPU 之间共享的 iOS 内存以及这对读取意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51913721/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap