Programming languages OpenCL伪位域

Programming languages OpenCL伪位域,programming-languages,opencl,parallel-processing,bit-fields,gpu,Programming Languages,Opencl,Parallel Processing,Bit Fields,Gpu,有可能吗?我知道OpenCL现在不支持普通的位字段 有没有办法从boolmybool[64]或类似的东西中得到一个明确的64位 union newType{ double value; bool bit[64]; }; 或者任何可能有帮助的远程相关信息?我希望有一些静态位模式来和值进行比较,并能够快速操作模式的单个位。是的,这是可能的。在64位整数上使用二进制运算符,不确定64位整数是否有效,因此只需创建一个包含2个整数的结构,并根据需要进行掩码和移位 我建议您调查操作符&^~

有可能吗?我知道OpenCL现在不支持普通的位字段

有没有办法从boolmybool[64]或类似的东西中得到一个明确的64位

union newType{
    double value;
    bool bit[64];
};

或者任何可能有帮助的远程相关信息?我希望有一些静态位模式来和值进行比较,并能够快速操作模式的单个位。

是的,这是可能的。在64位整数上使用二进制运算符,不确定64位整数是否有效,因此只需创建一个包含2个整数的结构,并根据需要进行掩码和移位


我建议您调查操作符
&
^
~
OpenCL规范保证
双精度
将是64位的,您可以使用
将其重新解释为长(
或联合以获得长
的64位

将64位标量重新解释为
char[8]
char8
是合法的(分别使用union和
作为_char8()
),但结果是由实现定义的。像endianness转换这样的事情可能会发生,因此您可能必须注意您的GPU在这方面的行为是否与CPU不同


double
执行位操作的唯一便携式方法是对64位标量整数类型使用逐位运算符,表示
long
ulong
,谢谢!一个struct myStruct{char[8];}也会工作吗?是的,但是要注意他/她的回答中的依赖性问题和@user57368状态。也许我可以根据应用程序的初始化阶段或其他什么,使用一个小的endian内核和一个大的endian内核版本,再次感谢!我相信有结束的定义。至少我知道你可以检查这个设备的亲和力。