cuda对齐256bytes严重吗?

时间:2012-12-29 15:09:31

标签: cuda textures

在“CUDA C编程指南5.0”中,p73(also here)表示“驻留在全局内存中或由驱动程序或运行时API中的一个内存分配例程返回的变量的任何地址始终与至少256字节“。我不知道这句话的确切含义。谁能为我展示一个例子?非常感谢。

衍生问题: 那么,如何分配基本元素(如int)或自定义元素的一维数组呢?数组的起始地址是256B的倍数,而数组中每个元素的地址不一定是256B的倍数?

1 个答案:

答案 0 :(得分:10)

使用任何CUDA运行时设备内存分配函数(例如cudaMalloccudaMallocPitch分配的指针保证是256字节对齐,即地址是256。

考虑以下示例:

char *ptr1, *ptr2;

int bytes = 1;

cudaMalloc((void**)&ptr1,bytes);
cudaMalloc((void**)&ptr2,bytes);

假设ptr1中返回的地址是256的某个倍数,那么ptr2中返回的地址将至少为(ptr1 + 256)

这是由分配内存的设备施加的限制。大多数情况下,由于性能目的,指针是对齐的。 (一些NVIDIA人应该能够判断是否还有其他原因)。

重要的:

指针对齐并不总是256 。在我的设备(GTX460M)上,它是512.您可以通过cudaDeviceProp::textureAlignment字段获取设备指针对齐。

指针的对齐也是将指针绑定到纹理的必要条件。