OGeek|极客世界-中国程序员成长平台

标题: CPU 和 GPU 之间共享的 iOS 内存以及这对读取意味着什么 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 14:52
标题: CPU 和 GPU 之间共享的 iOS 内存以及这对读取意味着什么

我有一个 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4