Memory 使用CUDA中的固定贴图内存绑定纹理

Memory 使用CUDA中的固定贴图内存绑定纹理,memory,cuda,textures,Memory,Cuda,Textures,我试图将映射为零拷贝的主机内存绑定到纹理,但看起来不可能 下面是一个代码示例: float* a; float* d_a; cudaSetDeviceFlags(cudaDeviceMapHost); cudaHostAlloc( (void **)&a, bytes, cudaHostAllocMapped); cudaHostGetDevicePointer((void **)&d_a, (void *)a, 0); texture<float, 2, cudaRe

我试图将映射为零拷贝的主机内存绑定到纹理,但看起来不可能

下面是一个代码示例:

float* a;
float* d_a;
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc( (void **)&a, bytes, cudaHostAllocMapped);
cudaHostGetDevicePointer((void **)&d_a,  (void *)a, 0);

texture<float, 2, cudaReadModeElementType> tex;
cudaBindTexture2D( 0, &tex, d_a, &channelDesc, width, height, pitch);
float*a;
浮动*d_a;
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc((void**)和a,字节,cudaHostAllocMapped);
cudaHostGetDevicePointer((void**)和d_a,(void*)a,0);
纹理纹理;
cudaBindTexture2D(0和tex、d_a和channelDesc、宽度、高度、节距);

是否建议您使用固定内存并将其复制到绑定到纹理的设备内存

这是可能的,但您必须确保音高正确对齐-至少64B粒度。我在cudaDeviceProp中看不到可以使用的对齐要求。textureAlignment将为您提供良好的指导-这是纹理基址的对齐要求,而不是音高;但我认为,对准要求比俯仰对准要求更严格

不幸的是,没有cudaHostAllocPitch()为您处理此问题


公平警告:我已经从主机内存中对1D纹理进行了相当多的定向性能测试,它是s-l-o-w。特斯拉级硬件速度为2G/s,费米级硬件速度为0.5g/s。我没有理由相信2D纹理会更快。

纹理是全局定义的吗?也可以使用cudaHostAllocWriteCombined如果您正在从主机内存读取纹理,它是全局定义的。cudaHostAllocWriteCombined只是通过避免缓存使设备端的读取更加高效。