我是相当新的OpenCL的,请多多包涵。

在我的代码的第一次迭代,我用于大型数据集的基本内存缓冲区,并宣布他们全球。但是现在,我正在寻找改善的时机,我想使用的纹理内存这一点。在CUDA版本中,我们使用cudaBindTexture和tex1Dfetch获得数据对于大1D float数组。从我的规范的理解,纹理内存是一回事图像存储器。然而,因为只有与最大高度和宽度的2D和3D图像对象,我碰到一些问题。我的阵列比最大高度/宽度大,但不是最大高度*最大宽度。我必须将我的一维数组转换成2D?还是有更好的方式来做到这一点?

还是我完全脱落?

我看过 http://forums.nvidia.com/index.php? showtopic = 151743 http://forums.nvidia.com/index。 PHP?showtopic = 150454 但他们不是在最佳实践和编程指南称为纹理存储器是否事实上是图像对象恰好定论。

感谢和任何帮助/建议是大大欢迎!

有帮助吗?

解决方案

我找到了最好的答案回复我的帖子NVIDIA的论坛的此处

其他提示

  

我的阵列比最大高度/宽度大,但不是最大高度*最大宽度。我必须将我的一维数组转换成2D?

是,纹理硬件对最大索引值的约束。如果超出了这些值,你就需要转换为使用多个索引值。

这是说,我不是暗示转化为纹理访问将加速你的程序。

的OpenCL 1.2支持1D纹理。问题是NVIDIA仅支持的OpenCL 1.1不像AMD或Intel ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top