什么是GPU上的相干内存?

迈克尔四世

我一次也没有偶然发现术语“不连贯”和“连贯”的记忆

与图形编程有关的技术论文。我一直在寻找简单明了的解释,但主要发现了这类“硬核”论文。我很高兴收到外行关于GPU架构实际上是什么以及如何使用相干内存的风格回答。与其他(可能是非一致的)内存类型进行比较。

尼科尔·波拉斯(Nicol Bolas)

记忆就是记忆。但是不同的事物可以访问该内存。GPU可以访问内存,CPU可以访问内存,也许还有其他硬件位。

如果其他人对该存储器所做的更改对读者来说可见的,则特定的事物具有对存储器的“连贯”访问现在,您可能会认为这是愚蠢的。毕竟,如果内存已经改变了,怎么会有人可能无法看到它?

简而言之,缓存。

事实证明,更改内存非常昂贵。因此,除非绝对必要,否则我们将尽一切可能避免更改内存。当您将一个字节从CPU写入内存中的指针时,CPU尚未将该字节写入。或者至少,不是为了记忆。它将其写入该内存的本地副本,称为“缓存”。

原因是,通常来说,应用程序不写入(或读取)单个字节。它们更有可能以小块形式写入(和读取)大量字节。因此,如果您要执行昂贵的操作,例如加载或存储内存,则应加载或存储大量内存。因此,您将要对内存块进行的所有更改都存储在高速缓存中,然后在将来某个时候将已缓存的块单次写入实际内存中。

但是,如果您有两个使用相同内存的独立设备,则需要某种方式来确保写入一个设备使其他设备可见。大多数GPU无法读取CPU缓存。而且大多数CPU语言都没有语言级别的支持来表示“嘿,我写到内存的东西了吗?我真的是想让您现在将其写到内存中。” 因此,您通常需要一些东西来确保更改的可见性。

在Vulkan中,标记为“ HOST_COHERENT”的内存意味着,如果您通过映射指针写入该内存(因为这是Vulkan允许您直接写入内存的唯一方法),无需使用特殊功能即可确保GPU可以看到这些更改。保证了GPU对任何更改的可见性。如果该标志在内存上不可用,则必须使用Vulkan API来确保要访问的特定数据区域的一致性。

有了一致的内存,就硬件而言,正在发生两件事之一。CPU对内存的访问未缓存在任何CPU的高速缓存中,或者GPU可以直接访问CPU的高速缓存(可能是由于与CPU处于相同的管芯)。您通常可以说后者正在发生,因为Vulkan的裸机GPU实现不必费心提供非一致性内存选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

图像聚类-在GPU上分配内存

来自分类Dev

不同 GPU 上的 Tensorflow 执行和内存

来自分类Dev

Pytorch模型在CPU和GPU上都内存不足,无法弄清楚我在做什么

来自分类Dev

在多个GPU上启动异步内存复制操作

来自分类Dev

GPU上的内存分配用于动态结构数组

来自分类Dev

对GPU上的全局内存位置的合并访问与广播访问

来自分类Dev

GPU上的矩阵乘法。内存库冲突和延迟隐藏

来自分类Dev

为什么Tensorflow显示的可用内存少于GPU规格?

来自分类Dev

GPU内存带宽和速度之间有什么区别?

来自分类Dev

GPU内存不足时会发生什么?

来自分类Dev

为什么在专用GPU上JOGL比集成GPU慢?

来自分类Dev

为什么在专用GPU上JOGL会比集成GPU慢?

来自分类Dev

什么是Linux上的高内存和低内存?

来自分类Dev

使用Pytorch在同一GPU上的进程之间共享GPU内存

来自分类Dev

为什么我的 GPU 在使用共享内存之前不使用所有专用内存?

来自分类Dev

PyTorch用尽GPU内存

来自分类Dev

为什么不在我的GPU上运行OpenCL(Ubuntu)

来自分类Dev

为什么在GPU上不执行OpenACC教程代码?

来自分类Dev

这些电影在CPU / GPU芯片上的目的是什么?

来自分类Dev

技嘉GeForce GT 1030 GPU上的这些端口是什么?

来自分类Dev

tf.linspace 在 GPU 上运行但需要 CPU 内存参数(急切执行)?

来自分类Dev

为什么在CPU和GPU内存之间的数据交换这么慢?

来自分类Dev

为什么在CPU和GPU内存之间的数据交换这么慢?

来自分类Dev

使用cuda在gpu上运行一个线程,为什么gpu的负载这么高?

来自分类Dev

什么时候清除堆栈上的本地功能内存?

来自分类Dev

为什么Vagrant上的内存和CPU设置失败?

来自分类Dev

为什么泄漏内存比在动态数组上执行 delete[] 慢

来自分类Dev

为什么memcpy到堆栈上的内存比堆上的内存快得多?

来自分类Dev

为什么物理上连续的内存区域比虚拟上连续的内存更有效?

Related 相关文章

  1. 1

    图像聚类-在GPU上分配内存

  2. 2

    不同 GPU 上的 Tensorflow 执行和内存

  3. 3

    Pytorch模型在CPU和GPU上都内存不足,无法弄清楚我在做什么

  4. 4

    在多个GPU上启动异步内存复制操作

  5. 5

    GPU上的内存分配用于动态结构数组

  6. 6

    对GPU上的全局内存位置的合并访问与广播访问

  7. 7

    GPU上的矩阵乘法。内存库冲突和延迟隐藏

  8. 8

    为什么Tensorflow显示的可用内存少于GPU规格?

  9. 9

    GPU内存带宽和速度之间有什么区别?

  10. 10

    GPU内存不足时会发生什么?

  11. 11

    为什么在专用GPU上JOGL比集成GPU慢?

  12. 12

    为什么在专用GPU上JOGL会比集成GPU慢?

  13. 13

    什么是Linux上的高内存和低内存?

  14. 14

    使用Pytorch在同一GPU上的进程之间共享GPU内存

  15. 15

    为什么我的 GPU 在使用共享内存之前不使用所有专用内存?

  16. 16

    PyTorch用尽GPU内存

  17. 17

    为什么不在我的GPU上运行OpenCL(Ubuntu)

  18. 18

    为什么在GPU上不执行OpenACC教程代码?

  19. 19

    这些电影在CPU / GPU芯片上的目的是什么?

  20. 20

    技嘉GeForce GT 1030 GPU上的这些端口是什么?

  21. 21

    tf.linspace 在 GPU 上运行但需要 CPU 内存参数(急切执行)?

  22. 22

    为什么在CPU和GPU内存之间的数据交换这么慢?

  23. 23

    为什么在CPU和GPU内存之间的数据交换这么慢?

  24. 24

    使用cuda在gpu上运行一个线程,为什么gpu的负载这么高?

  25. 25

    什么时候清除堆栈上的本地功能内存?

  26. 26

    为什么Vagrant上的内存和CPU设置失败?

  27. 27

    为什么泄漏内存比在动态数组上执行 delete[] 慢

  28. 28

    为什么memcpy到堆栈上的内存比堆上的内存快得多?

  29. 29

    为什么物理上连续的内存区域比虚拟上连续的内存更有效?

热门标签

归档