什么是 OpenCL 中的保留数据类型?

What are Reserved Data Types in OpenCL?

我想编写一个采用 float3 数据类型和 returns bool4 数据类型的内核。我查看了规范,booln 没有像 floatn[= 那样列在 内置向量数据类型 下20=],而是列在 保留数据类型 下,所以我尝试这样使用它:

( __global const float3 *vectors , __global bool4 *booleans)

但它 returns 一个错误 Unknown type name 'bool4'。那么什么是保留数据类型以及如何使用它们?

保留数据类型cannot be used by applications as user-defined type names

  • float3floatn 一样被保留,n 不是 2 的幂。所以我建议使用 float4 并且不要紧关于最后一个组件

  • bool4是保留的,booln也是保留的。不过,您仍然可以使用 char4

如果内存大小真的很重要,您可以使用以下方法:

union {
    char raw;
    struct st {
        unsigned int i : 1; // bit field to use only one bit
    } c[4];
} my_bool4;

然后使用 my_bool4.c[i] 对 [0,3] 中的所有 i 或使用 my_bool4.raw 和位掩码访问每个组件。

这样,对于 char4my_bool4 将只有 1 个字节长而不是 4 个字节长(好吧,这取决于编译器,但你 询问 1 个字节)。