我想编写一个采用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


float3floatn被保留,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/

10-15 06:05