18

カーネル側でメモリ バリアを設定するのは簡単です。マクロ mb、wmb、rmb などは、Linux カーネル ヘッダーのおかげで常に配置されています。

ユーザー側でこれを達成する方法は?

4

8 に答える 8

6

gccの完全なメモリ バリアアトミック ビルトインを探しています。

私がここで与えた参照の詳細に注意してください、

[次の] ビルトインは、インテル Itanium プロセッサ固有のアプリケーション バイナリ インターフェイスのセクション 7.4 で説明されているものと互換性があるように意図されています。そのため、「__builtin_」プレフィックスを使用するという通常の GCC の慣行から逸脱し、さらに複数の型で動作するようにオーバーロードされています。

于 2009-07-26T17:33:57.817 に答える
6

Posixでは、多くの関数がメモリ バリアとして機能するものとして定義されています。メモリー位置は同時にアクセスしてはなりません。これを防ぐには、同期を使用します。同期はバリアとしても機能します。

于 2009-07-26T17:44:07.920 に答える
4

libatomic_ops を使用します。 http://www.hpl.hp.com/research/linux/atomic_ops/

これはコンパイラ固有のものではなく、GCC のものよりもバグが少ないです。気にしない機能を大量に提供する巨大なライブラリではありません。アトミック操作を提供するだけです。また、さまざまな CPU アーキテクチャに移植できます。

于 2012-02-20T08:26:15.283 に答える
2

Linux x64 は、Intel メモリ バリア命令を使用できることを意味します。これらのマクロが適切でないか、コードにアクセスできない場合は、Linux ヘッダーと同様のマクロでそれらをラップすることができます。

于 2009-07-26T17:50:54.397 に答える
2

Qprof プロファイリング ライブラリ (Qt とは関係ありません) のソース コードには、メモリ バリアを含むアトミック操作のライブラリも含まれています。それらは多くのコンパイラとアーキテクチャで動作します。私は自分のプロジェクトでそれを使用しています。

http://www.hpl.hp.com/research/linux/qprof/download.php4

于 2010-12-03T04:10:18.963 に答える
2

__sync_synchronize()GCC 4.4 以降で

Intel Memory Ordering White Paper、Intel 64 および IA-32 マニュアルの Volume 3A のセクションhttp://developer.intel.com/Assets/PDF/manual/253668.pdf

于 2010-04-04T04:01:36.897 に答える
0

最近の Qt ディストリビューションのinclude/arch/qatomic_*.hヘッダーには、多くのアーキテクチャとあらゆる種類のメモリ バリア (取得、解放、両方) 用の (LGPL) コードが含まれています。

于 2009-07-26T20:30:24.340 に答える
0

Linux カーネル用に定義されたバリアを借りて、それらのマクロをヘッダー ファイルに追加するだけです: http://lxr.linux.no/#linux+v3.6.5/arch/x86/include/asm/barrier.h#L21。そしてもちろん、ソース コードで Linux 開発者の功績を認めてください。

于 2012-11-05T01:54:26.500 に答える