我需要帮助理解OpenCL缓冲区中的数据对齐

时间:2012-01-24 21:11:03

标签: opencl

给出以下结构

typedef struct
{
   float3 position;
   float8 position1;
} MyStruct;

我正在创建一个缓冲区,将其作为指向内核的指针传递,缓冲区将具有先前的缓冲区格式。

我明白在写入三个浮点数后我要在缓冲区中添加4个字节以获得下一个2的幂(16个字节),但我不明白为什么我要在写入之前另外添加16个字节position1的字节。否则我在position1中得到错误的值。

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:5)

float8是8个浮点数的向量,每个浮点数为4个字节。这使得大小为32字节。根据{{​​3}},类型对齐的第6.1.5节,类型始终与其大小一致;所以float8必须是32字节对齐。同一部分还告诉我们float3需要4个字。此外,由于结构的sizeof被安排为允许结构的数组,因此它不会从重新排序这些特定字段中缩小。在更复杂的结构上,您可以通过将较小的字段保持在一起来节省空间。