我的不同内核将使用一些常量数据。为了优化我的代码,我正在考虑使用纹理内存而不是常量内存,因为每个线程将加载不同的数据(尽管每个块都相同)。
对于每个线程,我的数据涉及浮点数 ( M )、大小为 3 的浮点数向量 ( K ) 或 3×3 浮点数矩阵 ( J )。
我至少有两个选择:
- 将M存储在一维数组中,将K存储在 2D 数组中,将J存储在 3D 数组中。
- 通过一些映射将M、K和J存储在线性内存中。
由于线程数非常少(N = 32),哪种解决方案最好?它是等效的,还是tex1Dfetch
比tex2D
and更快tex3D
?我不需要CUDA数组带来的特性(硬件插值等),内存限制显然不是问题。