【问题标题】:Atomic doubles/floats in Intel TBB英特尔 TBB 中的原子双精度/浮点数
【发布时间】:2023-03-23 06:38:01
【问题描述】:

根据文档,原子支持整数类型的 T, 枚举类型或指针类型。英特尔 TBB 是否正式支持浮点数/双精度数? 我看过一些补丁 here 和 Raf Schietekat here,它们可能/可能没有被合并到最新的 4.0 版本中。从我读过的补丁中,我注意到的唯一主要区别是将 reinterpret_cast 从整数类型添加到浮点/双精度。如果有人能澄清这一点,我将不胜感激。谢谢!

【问题讨论】:

    标签: c++ atomic tbb


    【解决方案1】:

    您可以轻松添加对基于 64 位和 32 位原子整数的浮点数的支持。原子加载/存储/交换可以使用 reinterpret_cast 作为直接包装器来实现,原子算术运算可以使用带有原子比较交换的循环来实现。

    【讨论】:

      【解决方案2】:

      C++11 支持原子浮点数和双精度数。不过,像 std::atomic_fetch_add 这样的算术函数只支持整数类型。

      如果您有 C++11 编译器,我建议您切换到 std::atomic,这样您就不必依赖未记录的行为。

      【讨论】:

      • 另外值得注意的是,使用std::atomic可以轻松高效地模拟算术函数。
      • 有趣。最好的方法是什么?它是一个比较和交换循环吗? (获取当前值并尝试将其与新结果交换。如果由于值更改而失败,请重试。)
      【解决方案3】:

      test_atomic.cpp 中的非整数类型测试是在 2008 年添加的(在与 Raf 讨论之后不久)。因此,甚至早于问题的时间,TBB 就支持浮点和双原子(尽管仅限于 fetch_and_store 和 compare_and_exchange 读取-修改-写入操作)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2023-03-25
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        • 2018-02-23
        相关资源
        最近更新 更多