1

在 OPENCL 和 CUDA 中,分别有一些原语,即 barrier() 和 syncthread(),来强制 L1 数据缓存/共享内存的一致性。这是否意味着缓存本身不连贯,即没有在硬件中为 L1 缓存实现的类似 CPU 的缓存一致性协议?

4

2 回答 2

5

大多数缓存一致性算法对于 GPU 来说是不可扩展的。此外,在 GPU 中具有缓存一致性会给 GPU 内存系统带来大量流量,这已经是 GPU 的瓶颈。因此,他们使用一种简单的驱逐技术来保持私有缓存和共享缓存之间的数据一致。简单地说,每当写入全局数据时,具有该数据的高速缓存行就会被驱逐到共享高速缓存。最近,引入了一些技术,但我怀疑它们实际上是在硬件中实现的。

于 2014-07-22T19:13:50.613 回答
0

在 nvidia 路线图中,由于 fermi arch 引入了 l1 和共享 l2 数据缓存,如 AmirC 所述,回写策略可能是 L1 数据缓存中的 write-evit,会出现缓存不一致性。kepler arch 引入了一个新的只读数据缓存来加载全局数据,但是他们不允许在 kepler arch 之后写入 l1 中的全局数据(maxwell,pascal,volta,turing,ampere 等)

于 2020-08-13T08:30:05.587 回答