我的不同内核将使用一些常量数据。为了优化我的代码,我正在考虑使用纹理内存而不是常量内存,因为每个线程将加载不同的数据(尽管每个块都相同)。
对于每个线程,我的数据涉及浮点( M ),浮点数的大小为3的矢量( K )或3×3矩阵浮动( J )。
我至少有两个选择:
由于线程数非常低(N = 32),哪种解决方案最好?它是等效的,还是tex1Dfetch
比tex2D
和tex3D
更快?我不需要CUDA阵列带来的功能(硬件插值等),内存限制显然不是问题。
答案 0 :(得分:1)
M
的访问模式完全合并,因此借助于计算能力设备的缓存层次结构的全局内存> 2.x将为该阵列提供最佳性能。
您在K和J中具有相同的访问模式,因此,访问也会合并。因此,没有理由不使用全局内存并获得最佳性能
正如你评论内存限制显然不是问题我明白数组的大小会很小,所以你会期望缓存层次结构的良好行为。
如果您想向前迈出一步,可以将K
数组复制到1D纹理内存并比较两种方法的性能。