【发布时间】:2013-12-07 16:02:01
【问题描述】:
我对纹理如何与 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 万)
这如何适合 1D 纹理??
在内核中我也发现了这个“需要更多解释,因为这里的所有东西都是连接的”
texture<float4, 1, cudaReadModeElementType> oldPosTex;
#define FETCH(t, i) tex1Dfetch(t##Tex, i)
在内核:
float4 pos = FETCH(oldPos, sortedIndex);
现在我还需要知道的是,我可以在帧缓冲区绘制而不是绘制 VBO 中使用此纹理“及其定义的大小 numParticles*sizeof(float4)?
【问题讨论】:
-
解释为什么在问一个我不明白的简单事情时投反对票