Ich führte folgenden Cuda Kernel, um die Textur Abrufmechanismus zu verstehen, aber sieht aus wie A [i] [j] th Eintrag in Array sollte von tex2D abgerufen werden (tex_ref, j, i) Ist das nicht kontraintuitiv? Fehle ich hier etwas?Verständnis Textur holen in CUDA
texture<float, cudaTextureType2D, cudaReadModeElementType> texRef;
surface<void,cudaSurfaceType2D> surfRef;
__global__ void transformKernel(float device_array[3][3],
int width, int height,
float theta)
{
unsigned int x = blockIdx.x * blockDim.x + threadIdx.x;
unsigned int y = blockIdx.y * blockDim.y + threadIdx.y;
printf("\n Array : %d %d = %f",x,y,device_array[x][y]);
printf("\n Texture : %d %d = %f",x,y,tex2D(texRef,x,y));
float temp;
surf2Dread(&temp, surfRef, x*sizeof(float),y);
printf("\n Surface : %d %d = %f",x,y,temp);
}
Array wird durch die Einstellung host_array [i] [j], um (i-j) besetzt, und wurde zu texRef, surfRef gebunden device_array und demselben Array kopiert.
Die Ausgabe sieht so aus:
Array: 0 0 = 0.000000
Array: 1 0 = 1.000000
Array: 0 1 = -1.000000
Array: 1 1 = 0.000000
Textur: 0 0 = 0,000000
Beschaffenheit: 1 0 = -1,000000
Beschaffenheit: 0 1 = 1,000000
Beschaffenheit: 1 1 = 0,000000
Liest aus Oberflächen Ähnliche Werte zurückgibt, wie die Textur nach Abrufen zurückgegeben.
Dank dafür:
Sie sollten vergleichbare Ergebnisse mit einer Auflösung von Indizes auf Ihrem Ausdruck erstellen können! – Abhishek