代码之家  ›  专栏  ›  技术社区  ›  lawful_neutral

具有映射内存、统一虚拟寻址和统一内存的GPU内存超额订阅

  •  2
  • lawful_neutral  · 技术社区  · 8 年前

    如果我理解正确的话,使用映射内存,数据驻留在主内存中,只有在访问时才会传输到GPU,因此分配到GPU内存中的数据应该没有问题。

    UVA类似于映射内存,但数据可以存储在CPU和GPU内存中。但是,GPU有可能在充满自己的数据的同时访问主存(与映射内存一样)吗?这种情况下会发生内存溢出吗?我已经读到,使用映射内存,数据直接进入本地内存,而不首先转移到全局内存,在这种情况下,不应该有任何溢出。这是真的吗?如果是的话,UVA也是真的吗?

    https://devblogs.nvidia.com/parallelforall/beyond-gpu-memory-limits-unified-memory-pascal/ ). 我做对了吗?

    1 回复  |  直到 8 年前
        1
  •  6
  •   Robert Crovella    8 年前

    是的,使用映射(即固定的“零拷贝”)方法,数据保留在主机内存中,并按需传输到GPU,但永远不会驻留在GPU内存中(除非GPU代码将其存储在那里)。如果您多次访问,可能需要从主机多次传输。

    UVA(统一虚拟寻址,请参阅 here here )或者托管内存(=UM),所以我将把这个例子称为UM,而不是UVA。

    使用UM plus CUDA 8.0或更高版本,再加上Pascal或更高版本的GPU,您可以使用UM(“托管”)分配超额订阅GPU内存。然后,这些分配名义上被限制为系统内存的大小(减去对系统内存的任何其他需求)。在这种情况下,CUDA运行时使用请求分页方法在主机和设备内存之间自动来回移动数据。