CUDA软件架构与开发环境详解
1. CUDA数组和纹理
CUDA数组与设备内存从同一物理内存池中分配,但它具有不透明的布局,这种布局针对2D和3D局部性进行了优化。图形驱动程序使用这些布局来存储纹理,通过将索引与寻址解耦,硬件可以对2D或3D元素块进行操作,而非1D行。
对于具有稀疏访问模式的应用程序,尤其是具有维度局部性的模式(如计算机视觉应用),CUDA数组是明显的选择。而对于具有规则访问模式的应用程序,特别是那些很少或没有重用,或者重用可以在共享内存中由应用程序显式管理的应用程序,设备指针是更合适的选择。
在某些应用程序(如图像处理应用)中,设备指针和CUDA数组之间的选择并不明确。在其他条件相同的情况下,设备内存可能比CUDA数组更可取,但以下因素可帮助决策:
- CUDA数组不占用CUDA地址空间。
- 在WDDM驱动程序(Windows Vista及更高版本)上,系统可以自动管理CUDA数组的驻留。
- CUDA数组只能驻留在设备内存中,GPU可以在通过总线传输数据时在两种表示之间进行转换。对于某些应用程序,在主机内存中保留间距表示,在设备内存中保留CUDA数组表示是最佳方法。
2. 纹理引用
纹理引用是CUDA用于设置纹理硬件以“解释”底层内存内容的对象。存在这种间接层次的部分原因是,多个纹理引用可以使用不同的属性引用同一内存。
纹理引用的属性可以是不可变的(即在编译时指定,更改会导致应用程序行为不正确)或可变的(即应用程序可以以编译器不可见的方式更改纹理的行为)。例如,纹理的维度(1D、2D或3D)是不可变的,因为编译器必须知道它才能获取正确数量的输入参数并发出正确的机
超级会员免费看
订阅专栏 解锁全文
9544

被折叠的 条评论
为什么被折叠?



