【问题标题】:Is it possible to run cuMemset on a CUarray?是否可以在 CUarray 上运行 cuMemset?
【发布时间】:2012-08-13 10:10:06
【问题描述】:

我有一个 CUarray,它是通过 cuGraphicsSubResourceGetMappedArray() 从我的 OpenGL 上下文中获得的。是否可以将它与 cuMemset*() 一起使用?

【问题讨论】:

    标签: cuda memset cuda-driver cuda-arrays


    【解决方案1】:

    不。您无法将设备指针放入 CUDA 数组(传递给 cuMemset*()),而且 NVIDIA 从未为 CUDA 数组提供 memset 函数。

    您必须将一些主机内存归零,然后在 CUDA 数组中执行 memcpy(或 memcpy),或者(如果您的应用仅在 SM 2.0 或更高版本上运行)使用表面存储自行运行。

    【讨论】:

    • 谢谢!您对第二个提案“使用表面商店自行开发”是什么意思?你的意思是写一个使用surf3Dwrite清除数组的内核?
    • 是的,这正是我所提议的——而且很高兴,因为表面加载/存储是无类型的,您可以编写一个模板函数来存储任何大小的操作数。有关 2D 示例,请参阅 CUDA 手册的纹理章节中的第 10.9.2 节。 cudahandbook.com/uploads/Chapter_10._Texturing.pdf
    • 谢谢!我实现了这两种方法,并且比内核更喜欢 cuMemcpyAtoA 方法,因为它运行得更快!
    • 如果您的 CUDA 数组附加到渲染缓冲区或作为 OpenGL 中帧缓冲区对象一部分的纹理,您也可以通过渲染 glClear(<value>,...) 来初始化它。这是我使用的方法,它似乎运行得非常快。
    猜你喜欢
    • 2017-11-28
    • 2012-02-10
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2015-04-10
    • 2012-10-01
    相关资源
    最近更新 更多