【发布时间】:2023-03-23 06:38:01
【问题描述】:
根据文档,原子支持整数类型的 T, 枚举类型或指针类型。英特尔 TBB 是否正式支持浮点数/双精度数? 我看过一些补丁 here 和 Raf Schietekat here,它们可能/可能没有被合并到最新的 4.0 版本中。从我读过的补丁中,我注意到的唯一主要区别是将 reinterpret_cast 从整数类型添加到浮点/双精度。如果有人能澄清这一点,我将不胜感激。谢谢!
【问题讨论】:
根据文档,原子支持整数类型的 T, 枚举类型或指针类型。英特尔 TBB 是否正式支持浮点数/双精度数? 我看过一些补丁 here 和 Raf Schietekat here,它们可能/可能没有被合并到最新的 4.0 版本中。从我读过的补丁中,我注意到的唯一主要区别是将 reinterpret_cast 从整数类型添加到浮点/双精度。如果有人能澄清这一点,我将不胜感激。谢谢!
【问题讨论】:
您可以轻松添加对基于 64 位和 32 位原子整数的浮点数的支持。原子加载/存储/交换可以使用 reinterpret_cast 作为直接包装器来实现,原子算术运算可以使用带有原子比较交换的循环来实现。
【讨论】:
C++11 支持原子浮点数和双精度数。不过,像 std::atomic_fetch_add 这样的算术函数只支持整数类型。
如果您有 C++11 编译器,我建议您切换到 std::atomic,这样您就不必依赖未记录的行为。
【讨论】:
std::atomic可以轻松高效地模拟算术函数。
test_atomic.cpp 中的非整数类型测试是在 2008 年添加的(在与 Raf 讨论之后不久)。因此,甚至早于问题的时间,TBB 就支持浮点和双原子(尽管仅限于 fetch_and_store 和 compare_and_exchange 读取-修改-写入操作)。
【讨论】: