代码之家  ›  专栏  ›  技术社区  ›  0fnt

DirectX/Cuda/OpenGL提供的总/纹理可访问内存

  •  3
  • 0fnt  · 技术社区  · 14 年前

    有人能解释一下Cuda上下文中使用的纹理内存与DirectX上下文中使用的纹理内存的区别吗。假设一个显卡有512MB的广告内存,它是如何分为恒定内存/纹理内存和全局内存的。

    例如,我有一个特斯拉卡,它的totalConstMem为64KB,totalGlobalMem为4GB,这是由cudagetdeviceproperty查询的,但是没有变量告诉我需要多少纹理内存。

    另外,当通过DirectX等图形API访问时,“纹理内存”是多少。我没有在这些api中编程的经验,所以我不知道它们如何访问以及访问什么样的内存。不过,所有的内存都是硬件缓存的。如果我错了,请纠正我。

    在KoppeKTop的回答之后:那么在CUDA和DirectX都使用的情况下,共享内存是否可以作为纹理内存的自动缓存呢?我不认为有另一个h/w缓存无论如何都是有意义的。这是否也意味着如果我在内核中使用整个共享内存,纹理内存就不会被缓存?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   KoppeKTop    14 年前

    实际上,我从来没有处理过DirectX,但是我可以用CUDA纹理来解释这种情况。纹理是简单数组(cudaArray或pitched array),具有缓存只读访问,存储在全局内存中。所以,512MB卡上一个大纹理的最大大小是512兆(实际上稍微小一点,但这还不够)。它被优化为访问2D空间中的数据(缓存为2D切片)。也可以在访问时转换坐标和值(有关详细信息,请参阅CUDA编程指南)。

    不,不是所有的内存都在访问时缓存(对于计算能力为1.x的CUDA设备)。只有恒定和纹理记忆。具有计算能力的设备>=2.0(费米)使用L1和L2缓存缓存所有内存访问(或仅L2—可配置)。

        2
  •  2
  •   elmattic    14 年前

    在科佩克托普的回答之后:世界也是如此 共享内存充当自动缓存 DirectX两者?我不认为有 另一个h/w缓存是有意义的 不管怎样。这是否也意味着如果我 使用整个共享内存 内核,纹理内存不会 缓存?

    对于GF100生成,您仍然有专用的纹理缓存,但现在共享内存和一级缓存(缓存全局内存)之间共享相同的片上内存。如果您使用CUDA,您可以配置如何分割此内存。对于DirectX/OpenGL,图形驱动程序使用48KB共享内存/16KB一级缓存配置。