簡體   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