cuda对齐256bytes严重吗?

问题描述 投票:7回答:1

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

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

cuda textures
1个回答
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人应该能够判断是否还有其他原因)。

Important:

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

指针的对齐也是将指针绑定到纹理的要求。

© www.soinside.com 2019 - 2024. All rights reserved.