英特尔TBB中的原子双打/浮点数

时间:2012-05-18 17:16:06

标签: c++ atomic tbb

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

C ++ 11支持原子浮点数和双精度数。但是,std::atomic_fetch_add之类的算术函数仅支持整数类型。

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

答案 2 :(得分:0)

test_atomic.cpp中非整数类型的测试是在2008年(在与Raf讨论之后不久)添加的。因此,即使早于问题的时间,TBB也支持float& double atomics(尽管仅限于fetch_and_store和compare_and_exchange读取 - 修改 - 写操作)。