質問

その他の週に書いて、少しスレッドのクラス片道のみのメッセージパイプするとスレッド(パイプ毎のスレッド違いのための双方向コミュニケーション)。また私のAthlon64X2が破壊も修復もおもしろくなっ走る問題である場合のスレッドが同じ変数に、現地のキャッシュされた値はこの変数は各コアでした。

ピックアップしました。 揮発性 キーワードは力変数からリフレッシュメモリがあるので、マルチコアx86プロセッサーのキャッシュのすべてのコア同期?はたしていきたいと思い悩む必要のなのか、 揮発性 および適正使用の軽量ロック機構を用いた_InterlockedExchangeセ私の揮発パイプ変数を扱っている場合を書きたい"ロック"の無料コードのためのマルチコアx86Cpu?

って利用されている重要なセクション、ミューテックス-イベントです。私は主に疑問がある場合はx86intrinsicsしているところを知らずの勢力に使用できるの執行のキャッシュ干渉性をもつ.

役に立ちましたか?

解決

volatile み力コードを再読み込みの値で制御できないが価値の読み込みます。る場合、値は最近、読み取りコードでそのキャッシュの場合、揮発性まで再読み込みキャッシュからないから。

ありませんのキャッシュコヒ指示x86.あprefetchの指示のように prefetchnta, な記憶に及ぼす影響の秩序意味論。で実施されることにより価値をL1キャッシュ汚染L2があるものはより複雑な現代のインテルのデザインの大型の共有 包括的 L3ます。

x86Cpu利用の変化に MESIプロトコル (MESIFのためのインテル、MOESIたAMDにキャッシュコヒーレントとその他(含む、民間L1キャッシュの異なるコア等)となるコアをしたい書キャッシュのラインを強制的にコアを無効にするにはそのコピーをする前に変更することができ独自のコピーから共有を修正。


必要な他のフェンスの指示のようMFENCE)をデータのスレッドが消費するかという問題にx86で、x86負荷/店舗 取得/リリース味 ですのでお問い合わせ下さい。必要はありません。MFENCE(バリア)を連続一貫性を追求します。(以前のバージョンのこと答えることを示唆 clflush が必要であったが、間違った).

いように予防する必要があったため コンパイル時の並べ替え, で、C++'sのメモリモデルが弱ます。 volatile は、悪くないというこ;C++11std::原子であり方を書き込みロック-無料のコードです。

他のヒント

キャッシュ・コヒーレンスを伴うx86プロセッサによって使用さMESIプロトコルにコアとの間に保証されます。データがまだコアキャッシュに立地している間、メモリにアクセスすることができ、外部ハードウェアを扱うときにのみ、メモリ一貫性を心配する必要があります。テキストはあなたがユーザランドでプログラミングしている示唆しているので、それはあなたの場合は、しかし、ここにあるようには見えません。

んの心配をする必要がキャッシュ干渉性をもつ.ハードウェアかせください。何をする必要がある心配は性能上の問題によるキャッシュ干渉性をもつ.

合コ#1を書き込む変数を無効にする他のすべてのコピーのキャッシュ回線その他のコアであるため、取得し 排他的所有権 キャッシュのライン前に犯しています。更にあたり、#2を読み込みと同じ変数に、我が家にもihクッキングヒーターキャッシュの除核#1は、既に記述して共有レベルのキャッシュ).

以降、全体のキャッシュライン(64バイトまでが読み込まれるからメモリ(または書面に戻る共有キャッシュを読み、さらに#2)でもコストパフォーマンス.この場合、避けられない。これが、望みの挙動をするために、


問題は、ときには複数の変数のキャッシュライン、プロセッサーが過ごす時間のキャッシュ同期の場合でも、コアの読み込みや書き込みができな変数のキャッシュする。

そのコストすることを確認することにより、必ずその変数は、同じキャッシュする。このような効果として知られて Falseの共有 しておりますので強制的にプロセッサーを同期させるために値をオブジェクトは共有スレッド)。

揮発性は、それを行うことはありません。 C ++では、揮発性のみがそのような代わりメモリのレジスタに変数を格納する、またはそれを完全に削除などどのコンパイラの最適化に影響を与えます。

あなたが使用しているコンパイラを指定していますが、窓にしている場合は、<のhref = "http://msdn.microsoft.com/en-us/library/ms686355(VSを見ていませんでした0.85)はこちらの>この記事を」のrel = "noreferrerを" .aspxの。また、ここでは ynchronizationの機能を見てみましょう>。あなたは、一般的volatileにあなたがそれをやりたいのに十分ではないことに注意したいのですが、VC 2005および2008の下で、非標準のセマンティクスはメモリバリアは約読み、書き込みを暗示addがそれに追加があるかもしれません。

あなたは物事が移植できるようにしたい場合は、

は、あなたがあなたの前にはるかに困難道を持っているつもりだ。

を含め、ここでの近代的なメモリ・アーキテクチャを説明する一連の記事があります< href = "http://duartes.org/gustavo/blog/post/intel-cpu-caches" のrel = "nofollowをnoreferrer">インテルCore2のはとより多くの近代建築のトピックをキャッシュします。

記事は、非常に読みやすいとも図示されています。お楽しみください!

ものが質問にお答えで答えて、私の知識です。

  1. 現在は携帯用の実現にはロック-無料で相互作用可能です。C++0x提案を解決するこの導入による原図書館があります。
  2. 揮発性が保証するものではありませんを提供atomicity、マルチコア及びその実装ベンダー固有のものです。
  3. のx86する必要がなくなり、より快適なシーンのような特別のを除き、共有変数を宣言するのにどの揮発を防ぐいくつかのコンパイラの最適化を行う場合下記からダウンロードできます。揮発性によって、コンパイラはキャッシュ値です。
  4. あのアルゴリズム(Dekker、インスタンス)なので、x86用格の変数.
  5. ない限り、知らず通アクセスデータとスレッドは、主要なパフォーマンスのボトルネックのプログラムからロック無料ソリューション。使用データーによる価値またはロックを解除します。

以下では、スレッドプログラム/ wのvolatileを使用する基準で良い記事である。

<のhref = "http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/" のrel = "nofollowをnoreferrer 「>マルチスレッドプログラミングの揮発ほとんど無駄ます。

ハーブサタが簡単に を提案 その他の二つの変数は居住者は別々のキャッシュする。彼は彼の同時キューパディングとの間にロックやノードのポインタ.

編集:使用している場合は、インテルのコンパイラまたはGCCを使用できます 原子builtins, は、えいの未然防止のキャッシュが可能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top