OpenCL 假位域
有可能吗?我知道 OpenCL 目前不支持普通位域。
有没有办法从 bool myBool[64] 中获取明确的 64 位或类似的东西
union newType{
double value;
bool bit[64];
};
或任何可能有帮助的远程相关的东西?我希望有一些静态位模式来与值进行比较,并能够快速操作模式的单个位。
Is it possible AT ALL? I know that OpenCL doesn't support normal bitfields right now.
Could there be a way to get a definite 64-bits out of bool myBool[64] or something like
union newType{
double value;
bool bit[64];
};
or anything at all remotely related that could be helpful? i'ld like to have some static bit patterns to compare against value and be able to quickly manipulate single bits of the patterns.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OpenCL 规范保证
double
将为 64 位,并且您可以使用as_long()
或联合来重新解释它以获取long
,这是 64 位。将 64 位标量重新解释为
char[8]
或char8
是合法的(分别使用 union 和as_char8()
),但结果是实现定义的。可能会发生字节顺序转换之类的情况,因此您可能必须注意 GPU 在这方面的行为是否与 CPU 不同。在
double
上进行位操作的唯一可移植方法是在 64 位标量整数类型上使用按位运算符,即long
或ulong
。The OpenCL Spec guarantees that a
double
will be 64 bits and that you can reinterpret it usingas_long()
or a union to get along
, which is 64 bits.Reinterpreting a 64 bit scalar to something like a
char[8]
or achar8
is legal (using a union andas_char8()
respectively), but the result is implementation-defined. Things like endianness conversions may occur, so you may have to watch out if your GPU behaves differently from your CPU in that respect.The only portable way to do bit manipulation on a
double
is to use bitwise operators on a 64-bit scalar integer type, meaininglong
orulong
.是的,这是可能的。在 64 位 int 上使用二元运算符,不确定 64 位 int 是否有效,因此只需创建一个具有 2 个 int 的结构,并根据需要进行掩码和移位。
我建议您研究运算符
&
|
^
~
Yes it is possible. Use binary operators on a 64 bit int, Not sure if 64 bit ints are valid, so just make a struct with 2 ints and mask and shift as desired.
I suggest you investigate the operators
&
|
^
~