ハイパースレッディングにより、境界が整列している場合でも、32ビットint(32ビットプロセッサ上)が非アトミックな読み取りと書き込みを行うことができることをどこかで読んだことがあります。ハイパースレッディングがこれにどのように影響するかを誰かが説明できますか?
2 に答える
それが本当なら、それはある特定のモデルまたはステッピングに固有のある種の恐ろしいCPUバグでしょう。32ビットの読み取りと書き込みがアトミックであるということはx86プラットフォームのプロパティの基本であり、Windows、Linux、および多くのアプリケーションソフトウェアに依存しています。
これが言及している可能性があると私が考えることができる唯一のことは、ハイパースレッディングのないシングルコアCPUからハイパースレッディングのあるシングルフィジカルコアCPUへの移行です。ハイパースレッディングのないシングルコアx86CPUでは、整列された32ビット変数に対して読み取り-変更-書き込み操作を行う単一の命令(インクリメントなど)は、ロックプレフィックスがなくてもアトミックです。(保証されているわけではありません。たまたまそうです。)ハイパースレッディングを備えたCPUは、2つの物理コアを備えたCPUとよく似た動作をするため、読み取り、変更、書き込み操作(交換以外)は、ロックプレフィックス。
ソフトウェアが遭遇するCPUの大部分は、何らかの方法で複数のコアを持っているため、これは今では無関係な区別です。したがって、整列された32ビット値に対する単一命令の読み取り-変更-書き込み操作でさえ、ロックされない限りアトミックではありません。(Exchangeは例外です。プレフィックスがなくてもロックされているためです。)
マルチCPUシステムであっても、整列された読み取りまたは書き込みは常にアトミックです。アトミックではないもの(そしてこれはおそらくあなたが聞いたこと、または少なくともあなたが聞いたはずのことです)は、インクリメントやメモリターゲットでの追加などの読み取り-変更-書き込み命令です。これらはHTシステムでもアトミックではありませんが、ロックされていない場合でも、単一の論理CPUを備えたシステムではアトミックです(保証ではなく、偶然です)。