鉴于以下结构
typedef struct
{
float3 position;
float8 position1;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
我正在创建一个缓冲区,将其作为指向内核的指针传递,缓冲区将具有先前的缓冲区格式.
我知道在写入三个浮点数之后我要在缓冲区中添加4个字节以获得下一个2的幂(16个字节)但我不明白为什么我要在写入字节之前另外添加16个字节位置1.否则我在position1中得到错误的值.
有人能解释一下为什么吗?
float8是8个浮点数的向量,每个浮点数是4个字节.这使得大小为32字节.根据OpenCL 1.2规范的 6.1.5节,类型对齐,类型始终与其大小一致; 所以float8必须是32字节对齐.同一部分还告诉我们float3需要4个字.此外,由于结构的sizeof被安排为允许结构的数组,因此它不会从重新排序这些特定字段中缩小.在更复杂的结构上,您可以通过将较小的字段保持在一起来节省空间.
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |