我正在处理一组(大的2k x 2k)图像 我需要在几个连续图像的堆栈中进行每像素操作。
对于使用单个2D大纹理+计算偏移与使用3D阵列有什么意见吗?
似乎3D阵列在CUDA api中有点“脱离主流”,分配传递函数与相同的2D函数非常不同。
似乎没有关于CUDA的更高级别“如何和为什么”而不是特定呼叫的任何良好文档
有best practices guide,但它没有解决此问题
答案 0 :(得分:6)
我建议你阅读“Cuda by Example”一书。它经历了所有这些没有记录的事情,它将解释“如何以及为什么”。
我认为如果你渲染CUDA内核的结果,你应该使用的是使用OpenGL互操作。这样,您的代码就可以处理GPU上的图像并将处理后的数据留在那里,从而使渲染速度更快。这本书就是一个很好的例子。
如果每个CUDA线程只需要读取第一帧中的一个像素和下一帧中的一个像素,则不需要使用纹理。如果每个线程在一堆连续像素中读取,纹理只会使您受益。所以你最好使用3D阵列。
答案 1 :(得分:0)
以下是使用CUDA和3D cuda阵列的示例: https://github.com/nvpro-samples/gl_cuda_interop_pingpong_st