この質問に関して、私はx86とx86-64だけに興味があります。
MSVC 2005
、__faststorefenceのドキュメントは言う:「保証のすべての直前店が後続店前に、グローバルに表示されていること。」 「ロードとストアメモリ参照の両方を含むすべての前メモリ参照は、任意の後続メモリ参照前に、グローバルに可視であることを保証する。」:
はMSVC 2008および2010の場合、それに変更しました
後者の書き方は、私の意見では、これは古いストアの前にCPUの負荷の並べ替えをブロックすることを意味します。これは、最初の定義とは異なります。つまり、組み込み関数は、古いストアでの非一時的なストアのブロッキングまたは並べ替えを処理することのみを意味します(他のx86(-64)の並べ替えだけです)。
しかし、その後、ドキュメント自体に矛盾するように見える:「x64プラットフォームでは、このルーチンはSFENCE命令よりも高速ストアフェンスある命令を生成し、x64プラットフォーム上の代わりに_mm_sfenceのこの本質的なを使用してください。 "
これはまだSFXのような機能を持っていることを意味しています。したがって、古いストアでもロードを並べ替えることができます。それはどちらですか?誰かが私の混乱をクリアすることはできますか?
PS:この関数のGCC版を探して、私はlong local; __asm__ __volatile__("lock; orl $0, %0;" : : "m"(local));
に出くわしましたが、それは32ビットコードからだと思います。 64ビットアナログは何でしょうか?__faststorefenceの動作は何ですか?
答えて
引用したGCCのバージョンは、MSVCが生成するコードに相当します。これは、x86/x86-64プロセッサアーキテクチャのドキュメントでは、ロード命令とストア命令がLOCK
ed命令で並べ替えられないように指定しているという事実に依存しています。
一般的にメモリモデルの制限がそれらの命令に適用されないため、これが非一時ストアに適用されるかどうかはわかりません。
こんにちはアンソニー、答えに感謝します。なぜなら、この組み込み関数のドキュメンテーションでは、32と64の両方ではなく、x64プラットフォームでの方が高速であると指定されているのはなぜかというと、ロックされた命令はx86-64の場合に比べて安価です。さらに、ロードとストアの両方が並べ替えられないようにする場合は、これが順次整合性のための十分なフェンスですか(非一時ストアの場合を除く)。 –
この組み込み関数は、x86-64のMSVCでのみ使用できます。どうしてか分かりません。アーキテクチャは本質的に同じであるため、x86-64のx86と同じコストを「MFENCE」と同じにすることが期待されます。非一時的なストアを無視すると、これは逐次整合性のための十分なフェンスです。 –
- 1. toolTip.AutoPopDelay = 0の動作は何ですか
- 2. vimで動作し、vimで動作しないコマンドは何ですか?
- 3. Windows XPで動作するPythonのバージョンは何ですか?
- 4. Ramda's apで動作しない私のアプリケーションファンクタは何ですか?
- 5. PCスリープモードとスクリーンロックモードでjavascriptのsetInterval動作は何ですか?
- 6. iOSで動作しないActionscriptの機能は何ですか?
- 7. `std :: list`の` end() `を消去する動作は何ですか?
- 8. EntryProcessorのシリアル化の動作は何ですか?
- 9. GNU Awk 4.2のFS = ""の動作は何ですか?
- 10. 次のコードの動作は何ですか?
- 11. OrbeonフォームのROUND関数の動作は何ですか?
- 12. ツールチップのShowAlwaysプロパティの動作は何ですか?
- 13. 一般的なWebブラウザのアドレスバーの動作は何ですか?
- 14. アンドロイドの互換性の動作は何ですか?
- 15. LUTなどのL1/L2キャッシュの動作とは何ですか?
- 16. ボトムシートのボトム動作の役割は何ですか?
- 17. C++のデフォルトの割り当て動作は何ですか?
- 18. EFで動作するDbContextプロジェクトは何ですか?
- 19. Camusの予想されるコミット/ロールバック動作は何ですか?
- 20. Firefox 3.xの代替動作とは何ですか?
- 21. ポストインクリメント演算子の内部動作は何ですか?
- 22. SQLワークフローインスタンスストアの再試行動作とは何ですか?
- 23. CUDA実行の正確な動作は何ですか?
- 24. 構造Verilogと動作Verilogの違いは何ですか?
- 25. Gradleキャッシングの具体的な動作は何ですか?
- 26. _NET_WM_STATE_MODALの予想される動作は何ですか?
- 27. AUTOSARのDem動作サイクルとは何ですか?
- 28. virtualenv pythonで期待される動作は何ですか?
- 29. `int.class.cast(null)`が動作する理由は何ですか?
- 30. 信号をブロックする動作は何ですか?
「__faststorefence」よりも良い質問タイトルを付けることはできますか? –
@JaredFarrish:決して遅くない方がいいですか? :) – GManNickG