OpenCL中的保留数据类型是什么?
我想编写一个内核,它接受float3数据类型并返回bool4数据类型。我查看了规范,booln没有像floatn一样列在内置向量数据类型下,而是列在保留数据类型下,所以我尝试这样使用它:OpenCL中的保留数据类型是什么?,c,opencl,C,Opencl,我想编写一个内核,它接受float3数据类型并返回bool4数据类型。我查看了规范,booln没有像floatn一样列在内置向量数据类型下,而是列在保留数据类型下,所以我尝试这样使用它: ( __global const float3 *vectors , __global bool4 *booleans) 但它返回一个错误未知类型名'bool4'。那么什么是保留数据类型以及如何使用它们呢?保留数据类型 float3是保留的,以及floatn,n不是2的幂。因此,我建议使用float4,不要
( __global const float3 *vectors , __global bool4 *booleans)
但它返回一个错误未知类型名'bool4'
。那么什么是保留数据类型以及如何使用它们呢?保留数据类型
是保留的,以及float3
,n不是2的幂。因此,我建议使用floatn
,不要在意最后一个组件float4
是保留的,以及所有n的bool4
。不过,您仍然可以使用booln
char4
union {
char raw;
struct st {
unsigned int i : 1; // bit field to use only one bit
} c[4];
} my_bool4;
然后使用[0,3]中所有i的my_bool4.c[i]
或my_bool4.raw
和位掩码访问每个组件
这样,
my_bool4
的长度将仅为1字节,而不是char4
的长度为4字节(这取决于编译器,但您要求的是1字节)。Google,第一个结果:我读到了,但我仍然不明白。如果不能使用,为什么要在规范中编写它们?使用bool4的替代方案是什么?bool4
不保留。似乎typen
是保留的,如果n不是2的幂。所以float3是保留的,但您可以简单地使用float4。您的意思是使用float4而不是bool4?这将是超级低效的,因为我将复制到主机内存。