OpenCL 假位域

发布于 2024-10-12 07:49:27 字数 221 浏览 6 评论 0原文

有可能吗?我知道 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦毁影碎の 2024-10-19 07:49:27

OpenCL 规范保证 double 将为 64 位,并且您可以使用 as_long() 或联合来重新解释它以获取 long,这是 64 位。

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

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

The OpenCL Spec guarantees that a double will be 64 bits and that you can reinterpret it using as_long() or a union to get a long, which is 64 bits.

Reinterpreting a 64 bit scalar to something like a char[8] or a char8 is legal (using a union and as_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, meaining long or ulong.

游魂 2024-10-19 07:49:27

是的,这是可能的。在 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 & | ^ ~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文