繁体   English   中英

了解纹理如何与CUDA一起使用

[英]understanding how textures work with CUDA

我对纹理如何与CUDA一起使用感到困惑

当我在“ GTX 780上”进行设备查询时,我发现:

Maximum Texture Dimension Size (x,y,z)  1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)

现在,当我调查CUDA“粒子示例”时,我发现了这一点:

checkCudaErrors(cudaBindTexture(0, oldPosTex, sortedPos, numParticles*sizeof(float4)));

在我的情况下,numParticles已将其提高到1024 * 1024 * 2(约210万)

这如何适合一维纹理?

同样在内核中,我发现这“需要更多解释,因为这里的所有内容都已连接”

texture<float4, 1, cudaReadModeElementType> oldPosTex;
#define FETCH(t, i) tex1Dfetch(t##Tex, i)

在内核:

float4 pos = FETCH(oldPos, sortedIndex); 

现在我还需要知道的是,我可以在帧缓冲区绘制中使用此纹理“及其定义的大小numParticles * sizeof(float4),而不是绘制VBO?

这如何适合1D纹理?

纹理硬件包括两个主要部分,纹理过滤硬件和纹理缓存。 纹理过滤包括诸如插值,通过标准化浮点坐标进行寻址以及处理越界地址(钳位,环绕,镜像和边界寻址模式)之类的功能。 纹理缓存可以将数据存储在空间填充曲线中,以最大化2D空间局部性(从而最大化缓存命中率)。 它还可以将数据存储在常规平面阵列中。

Maximum Texture Dimension Size是指纹理过滤硬件中的限制,而不是纹理缓存硬件中的限制。 因此,它指的是使用tex2D()类的函数时可能会遇到的限制,但使用tex1Dfetch()类的tex1Dfetch()未执行未过滤纹理查找tex1Dfetch()时可能达到的极限。 因此,您提供的代码可能是为tex1Dfetch()

需要更多的解释,因为这里的一切都连接

这个问题范围太广,可能是您的问题被否决的原因。

现在我还需要知道的是,我可以在帧缓冲区绘制中使用此纹理“及其定义的大小numParticles * sizeof(float4),而不是绘制VBO?

这不是CUDA的问题,因为CUDA无法绘制任何内容。 您应该查看CUDA OpenGL互操作,以查看您的问题是否得到了回答。 如果不是,则应创建一个新问题并更清楚地描述您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM