OpenCL假位域

时间:2011-01-17 04:06:41

标签: programming-languages opencl parallel-processing bit-fields gpu-programming

有可能全部吗?我知道OpenCL现在不支持正常的位域。

有没有办法从bool myBool [64]或类似的东西中获得明确的64位?

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

或任何与远程相关的东西可能会有所帮助?我希望有一些静态位模式与值进行比较,并能够快速操作模式的单个位。

2 个答案:

答案 0 :(得分:2)

OpenCL规范保证double为64位,您可以使用as_long()或union来重新解释它,以获得long,即64位。

将64位标量重新解释为类似char[8]char8的内容是合法的(分别使用union和as_char8()),但结果是实现定义的。可能会发生字节序转换等事情,因此您可能需要注意GPU在这方面的行为是否与CPU不同。

double上进行位操作的唯一可移植方法是在64位标量整数类型上使用按位运算符,即longulong

答案 1 :(得分:1)

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

我建议您调查运营商& | ^ ~