2012-05-18 10 views
8

この資料によると、アトミック・タイプはインテグラル・タイプのT、つまり 列挙型またはポインタ型をサポートしています。インテル®TBBは浮動小数点/ダブルスを公式にサポートしていますか? 私はいくつかのパッチhereとRaf Schietekat hereを見たことがあります。最新の4.0リリースに組み込まれているかもしれません。私が読んだパッチから、私が気づいた唯一の大きな違いは、integer型からfloat/doubleへのreinterpret_castの追加でした。誰かがこれを明確にすることができれば、私はそれを感謝します。ありがとう!インテル®TBBのアトミック・ダブル/浮動小数点

答えて

1

64ビットと32ビットの整数の上に構築された浮動小数点数のサポートを簡単に追加できます。原子ロード/ストア/交換は、reinterpret_castを使用して直接ラッパーとして実装することができ、アトム比較演算を伴うループを使用してアトミック算術演算を実装することができます。

1

C++ 11は、原子浮動小数点数と倍数をサポートしています。しかし、std::atomic_fetch_addのような算術関数は整数型に対してのみサポートされています。

C++ 11コンパイラをお持ちの場合は、std::atomicに切り替えることをお勧めしますので、文書化されていない動作に頼る必要はありません。

+1

また、算術関数を 'std :: atomic'で簡単かつ効率的にエミュレートすることができます。興味深いもの: –

+0

それを行う最善の方法は何ですか?それは比較とスワップのループですか? (現在の値を取得して新しい結果と交換してください。値が変更されたために失敗した場合は、再試行してください) –

+0

これは方法です。 –

0

test_atomic.cppの非整数型のテストは、2008年に追加されました(Rafとの議論の直後)。したがって、問題の時よりも早くても、TBBはdouble float & double atomicsをサポートしています(しかし、fetch_and_storeとcompare_and_exchangeのread-modify-write opsのみに制限されます)。

関連する問題