【问题标题】:OpenCL Texture MemoryOpenCL 纹理内存
【发布时间】:2010-12-29 21:35:36
【问题描述】:

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

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

还是说我完全不在了?

我确实阅读了 http://forums.nvidia.com/index.php?showtopic=151743http://forums.nvidia.com/index.php?showtopic=150454,但它们并不能完全确定最佳实践和编程指南中提到的纹理内存是否实际上是图像对象。

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

【问题讨论】:

    标签: optimization memory cuda textures opencl


    【解决方案1】:

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

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

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

    【讨论】:

    • 过度使用全局内存,read_only 图像纹理内存通常会基于内核提供更好的性能,因为它是缓存的。我从中获得了相当不错的性能提升。
    • 对这个问题有什么想法吗? forums.nvidia.com/index.php?showtopic=154686
    【解决方案2】:

    我在 NVidia 论坛 here 上回复我的帖子时找到了最佳答案。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多