我想编写一个采用float3数据类型并返回bool4数据类型的内核。我查看了规范,没有像floatn那样在内置矢量数据类型下列出booln,而是在保留数据类型下列出了它,因此我尝试这样使用它:
( __global const float3 *vectors , __global bool4 *booleans)
但是它返回错误
Unknown type name 'bool4'
。那么什么是保留数据类型,如何使用它们呢? 最佳答案
保留的数据类型cannot be used by applications as user-defined type names。float3
和floatn
被保留,n不为2的幂。因此,我将使用float4
进行命令,并且与最后一个组件无关bool4
和所有n的booln
被保留。您仍然可以使用char4
。
如果内存大小确实很重要,则可以使用以下方法:
union {
char raw;
struct st {
unsigned int i : 1; // bit field to use only one bit
} c[4];
} my_bool4;
然后使用[cc]访问[0,3]中所有i的每个组件,或者使用
my_bool4.c[i]
和位掩码访问每个组件。这样,
my_bool4.raw
的长度将仅为1个字节,而my_bool4
的长度将为4个字节(嗯,这取决于编译器,但您要求的是1个字节)。关于c - OpenCL中保留的数据类型是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45232026/