有可能全部吗?我知道OpenCL现在不支持正常的位域。
有没有办法从bool myBool [64]或类似的东西中获得明确的64位?
union newType{
double value;
bool bit[64];
};
或任何与远程相关的东西可能会有所帮助?我希望有一些静态位模式与值进行比较,并能够快速操作模式的单个位。
答案 0 :(得分:2)
OpenCL规范保证double
为64位,您可以使用as_long()
或union来重新解释它,以获得long
,即64位。
将64位标量重新解释为类似char[8]
或char8
的内容是合法的(分别使用union和as_char8()
),但结果是实现定义的。可能会发生字节序转换等事情,因此您可能需要注意GPU在这方面的行为是否与CPU不同。
在double
上进行位操作的唯一可移植方法是在64位标量整数类型上使用按位运算符,即long
或ulong
。
答案 1 :(得分:1)
是的,这是可能的。在64位int上使用二元运算符,不确定64位整数是否有效,因此只需创建一个包含2个整数的结构并根据需要进行掩码和移位。
我建议您调查运营商&
|
^
~