我对OpenCL很新,所以请耐心等待。
在我的代码的第一次迭代中,我使用了大型数据集的基本内存缓冲区并将它们声明为全局。但是现在我正在寻求改进时序,我想为此使用纹理内存。在CUDA版本中,我们使用cudaBindTexture和tex1Dfetch来获取大型1D浮点数组的数据。根据我对规范的理解,纹理内存与图像内存是一回事。但是,由于只有最大高度和宽度的2D和3D图像对象,我遇到了一些问题。我的数组大于最大高度/宽度,但不是最大高度*最大宽度。我必须将我的1D阵列转换为2D吗?或者有更好的方法吗?
还是我完全离开了?
我确实阅读了http://forums.nvidia.com/index.php?showtopic=151743和http://forums.nvidia.com/index.php?showtopic=150454,但他们对最佳实践和编程指南中提到的纹理内存是否实际上是图像对象并不完全确定。
谢谢,非常欢迎任何帮助/建议!
答案 0 :(得分:3)
我在NVidia的论坛here上回复了我的帖子,找到了最佳答案。
答案 1 :(得分:1)
我的数组大于最大高度/宽度,但不是最大高度*最大宽度。我必须将我的1D阵列转换为2D吗?
是的,纹理硬件对最大索引值有约束。如果超过这些值,则需要转换为使用多个索引值。
那就是说,我并不是说转换为纹理访问会加速你的程序。
答案 2 :(得分:1)
OpenCL 1.2支持1D纹理。问题是NVIDIA只支持OpenCL 1.1,不像AMD或Intel ......