什么是 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。
float3
和 floatn
一样被保留,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
和位掩码访问每个组件。
这样,对于 char4
,my_bool4
将只有 1 个字节长而不是 4 个字节长(好吧,这取决于编译器,但你 询问 1 个字节)。
我想编写一个采用 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。
float3
和floatn
一样被保留,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
和位掩码访问每个组件。
这样,对于 char4
,my_bool4
将只有 1 个字节长而不是 4 个字节长(好吧,这取决于编译器,但你 询问 1 个字节)。