如果写和读发生在MTLBuffer的不同内存页上,需要CPU-GPU同步吗?



我正在使用Metal中的MTLBuffer,我通过使用

分配几个内存页面(使用vm_allocate)创建了这个MTLBuffer。device.makeBuffer(bytesNoCopy:length:options:deallocator:).

我用CPU写缓冲区,GPU只读它。我知道通常我需要在CPU和GPU之间同步。

然而,我对MTLBuffer中写(CPU)和读(GPU)发生的位置有更多的了解,在我的情况下,写是在不同的内存页中,而不是读(在给定的时间间隔内)。

我的问题:我需要CPU和GPU之间的同步,即使相关的数据写入和读取是在不同的内存页(但在相同的MTLBuffer)?直观地说,我认为不是,但是MTLBuffer有点不透明,我真的不知道GPU实际使用MTLBuffer做了什么样的处理/要求。

附加信息:这是iOS和MTLStorageMode共享的问题。

非常感谢您的帮助!

假设缓冲区是用MTLStorageModeManaged创建的,你可以使用didModifyRange函数来同步CPU到GPU的缓冲区的一部分(例如一个页面)。

最新更新