【发布时间】:2016-07-18 17:07:01
【问题描述】:
我按照 cuda 内核执行,以了解纹理获取机制,但看起来数组中的第 A[i][j] 个条目应该由 tex2D(tex_ref,j,i) 获取这不是违反直觉吗?我这里有什么遗漏吗?
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);
}
通过将 host_array[i][j] 设置为 (i-j) 来填充数组,并复制到 device_array 并且相同的数组绑定到 texRef,surfRef。
输出看起来像:
数组:0 0 = 0.000000
数组:1 0 = 1.000000
数组:0 1 = -1.000000
数组:1 1 = 0.000000
纹理:0 0 = 0.000000
纹理:1 0 = -1.000000
纹理:0 1 = 1.000000
纹理:1 1 = 0.000000
从表面读取返回的值与获取纹理后返回的值相似。
【问题讨论】:
标签: cuda