2012-03-15 7 views
0

私は、ハイパースレッディングによって境界が整列されていても、32ビットint(32ビットプロセッサ上)で非アトミックな読み書きができることを読んでいます。ハイパースレッディングがこれにどのように影響を与えるのか誰も説明できますか?ハイパースレッディングは、32ビットプロセッサ上での32ビットintの読み取り/書き込みの原子性に影響を及ぼしますか?

+0

私はあなたが正しく理解しているかどうかはわかりません。私は、読み込みが原子的であると信じています(すべてのワード・アライメントされた4バイトはまだ一度に読み込まれます)が、実際に読み込まれたものについてはメモリ・モデルが驚きを与えるかもしれません。 –

+6

リンク、またはそれは起こらなかった。私たちは誰かが「どこかに読んだ」という狂った噂を討論することはできません。 (おそらくそれは間違っていました) – cHao

+2

単純な算術演算をアトミックに実行することができない場合、それは幾分興味深い意味を持ちます... – Corbin

答えて

5

これが真実なら、特定のモデルやステッピングに特有の恐ろしいCPUバグです。 32ビットの読み書きはアトミックであることは、x86プラットフォームのプロパティの基本であり、Windows、Linux、たくさんのアプリケーションソフトウェアに依存しています。

これは、ハイパースレッディングなしのシングルコアCPUから、ハイパースレッディング付きのシングル物理コアCPUへの移行を指していると思います。ハイパースレッディングのないシングルコアのx86 CPUでは、整列した32ビット変数に対するリード・モディファイ・ライト操作を行う単一の命令(インクリメントなど)は、ロック接頭辞がなくてもアトミックです。ハイパースレッディングのCPUは、2つの物理コアを持つCPUのように動作します。したがって、読み取り - 変更 - 書き込み操作(それ以外の交換)は、ロック接頭辞。

あなたのソフトウェアが遭遇するCPUの大部分には、複数のコアがありますので、これは無関係です。従って、整列した32ビット値に対する単一命令のリード・モディファイ・ライト・オペレーションでさえ、ロックされていなければアトミックではありません。 (Exchangeは例外であり、プレフィックスがなくてもロックされているため)

2

マルチCPUシステムでも、アライメントされた読み取りまたは書き込みは常にアトミックです。アトミックでないもの(そしてこれはおそらくあなたが聞いたことであり、少なくともあなたが聞いたはずのものです)は、増分のようなリード・モディファイ・ライト命令、またはメモリ・ターゲットでの追加です。これらはHTシステム上でさえ原子ではありませんが、ロックされていなくても単一の論理CPUを持つシステムでは原子レベル(保証ではなく、偶然)です。

+0

あなたはこれ以上のことを詳しく説明していますか? – DuckMaestro

関連する問題