2

我对 OpenCL 还很陌生,所以请多多包涵。

在我的代码的第一次迭代中,我为大型数据集使用了基本的内存缓冲区,并将它们声明为全局的。然而,现在我正在寻求改进时间,我想为此使用纹理内存。在 CUDA 版本中,我们使用 cudaBindTexture 和 tex1Dfetch 来获取大型一维浮点数组的数据。根据我对规范的理解,纹理内存与图像内存是一回事。但是,由于只有最大高度和宽度的 2D 和 3D 图像对象,我遇到了一些问题。我的数组大于最大高度/宽度,但不是最大高度 * 最大宽度。我必须将我的一维数组转换为二维吗?或者有更好的方法吗?

还是我完全关闭了?

我确实阅读了http://forums.nvidia.com/index.php?showtopic=151743http://forums.nvidia.com/index.php?showtopic=150454但它们在纹理内存是否具有确切的结论最佳实践和编程指南中提到的实际上是图像对象。

谢谢,非常欢迎任何帮助/建议!

4

3 回答 3

3

I found the best answer as a reply to my post on NVidia's forum here.

于 2009-12-31T17:23:16.457 回答
1

OpenCL 1.2 支持一维纹理。问题是 NVIDIA 只支持 OpenCL 1.1,这与 AMD 或 Intel 不同...

于 2014-01-31T00:53:34.737 回答
1

我的数组大于最大高度/宽度,但不是最大高度 * 最大宽度。我必须将我的一维数组转换为二维吗?

是的,纹理硬件对最大索引值有限制。如果超过这些值,则需要转换为使用多个索引值。

也就是说,我并不是说转换为纹理访问会加速你的程序。

于 2009-12-30T16:51:50.010 回答