【问题标题】:bit-wise operation and strict aliasing逐位运算和严格混叠
【发布时间】:2023-03-15 13:55:01
【问题描述】:

按位运算和严格对齐

我正在尝试利用硬件的最新功能为基于位的操作编写一些高性能函数,我面临的问题是:

我想包含一个按位计数操作,在这种情况下,我使用 Intel SSE4.2popcnt 只接受整数类型值。

同时,如果我需要进行其他按位逻辑运算,那么 AVX 支持 256 位宽的按位逻辑运算,例如 VORPD(而不是 SSE2 的 128 位宽的按位逻辑运算) ,但仅限于浮动数据。

结合按位设置/重置操作的事实,char 是最快的,所以我可能需要至少三种类型的指针指向相同的内存位置:char 类型,long long(64 位整数,用于最佳按位计数)和浮点类型指针,但是整数和浮点类型指针的共存打破了严格的别名规则。

对解决这个问题有什么建议吗?谢谢。

【问题讨论】:

  • 我从来没有遇到过 SIMD 数据类型的严格别名问题。我敢打赌,很多编译器都将它视为一个例外,并将围绕它进行构建。
  • @Mysticial 目前没有应用严格规则,所以我知道许多编译器可以接受你得到 3 种类型的指针指向同一个地址,我只是想要更多的面向未来的解决方案。

标签: c++ pointers bit-manipulation simd


【解决方案1】:

您使用的是gccclang 还是行为类似的东西?他们有__attribute__((__may_alias__)) 来解决这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2018-03-20
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多