正在寻找将cudaSurfaceObject\u t转换为CUDateTextureObject\u t的有效方法

正在寻找将cudaSurfaceObject\u t转换为CUDateTextureObject\u t的有效方法,cuda,Cuda,我将要写一些代码,它将以一个基音线性浮点数组开始,该数组将被加载到设备内存中,进行分析、修改,然后变成相同尺寸的只读纹理对象。 我认为最好的方法是从浮动中创建一个cudaSurfaceObject\u t,然后将该曲面对象转换为卡上的cudaTextureObject\u t 我的问题是,我只知道如何从浮点数组创建纹理;我不知道如何从曲面对象创建一个,而不将数组复制回主体并从该对象创建纹理对象 有没有办法在卡片上这样做而不需要复制的开销 我怀疑这是可以使用基础的cudaArray对象来完成的,但

我将要写一些代码,它将以一个基音线性浮点数组开始,该数组将被加载到设备内存中,进行分析、修改,然后变成相同尺寸的只读纹理对象。 我认为最好的方法是从浮动中创建一个cudaSurfaceObject\u t,然后将该曲面对象转换为卡上的cudaTextureObject\u t

我的问题是,我只知道如何从浮点数组创建纹理;我不知道如何从曲面对象创建一个,而不将数组复制回主体并从该对象创建纹理对象

有没有办法在卡片上这样做而不需要复制的开销


我怀疑这是可以使用基础的cudaArray对象来完成的,但我不知道怎么做。

我的问题的简短回答是,可以使用基础的cudaArray对象从曲面对象创建纹理对象

这个过程是:-

  • 获取起始阵列并将其复制到设备上
  • 创建尺寸正确的cudaArray\t对象
  • 从cudaArray创建一个surfaceObject
  • 将原始数据映射到曲面(内核1)
  • 根据需要处理表面(内核2)
  • 将同一cudaArray对象绑定到纹理对象
  • 以正常方式访问纹理(内核3)
  • 我不是在这里发布代码,因为我认为注释中共享的@RobertCrovella示例包含了理解这一点所需的所有信息 该链接在这里重新发布

    请注意,@Talonmes在他的评论中也是正确的-您不能从表面转换为纹理。但是,可以从附着到该曲面的基础cudaArray创建纹理


    我要去看一些背景资料。

    我99%确定你不能在曲面和曲面之间“转换”textures@talonmies,谢谢-我想没有。如果我将数据保持为曲面,那么当我访问存储的数据时,性能会受到更大的影响。即,访问曲面是否比访问纹理慢?或者它也一样快?最后,有没有一本书或一个网站可以让我在不打扰你的情况下研究这类问题?干杯所有这些功能只是CUDA公开了Direct3D规范级别要求的一些功能。如果您想了解什么是可能的,什么是不可能的,什么是性能的,什么是不性能的,那么使用呈现API文档和文献作为起点会更好。然后再回到CUDA。我认为你的问题可以说是重复的,有争议的区别是你指的是对象,而那里的答案使用的是引用。然而,这几乎是一个机械上的差异。所有的概念都在那里,依我看。如前所述,您所需要的几乎所有东西都已经存在于CUDA示例代码中。@RobertCrovella-谢谢您-我将研究您提供的示例,然后为我的问题写出正确的答案。从一次偶然的检查来看,我相信你已经回答了我的问题。