2012-03-08 10 views
0

私はメモリバリアが必要な理由を理解していますが、ユニプロセッサの場合はそれを得られません。メモリバリアはSMPでのみ意味がありますか?

私がUPを使用しても障壁に対処する必要はありますか?すべてのドキュメントはSMPで説明しますが、UPでは説明しません。

次のコードでは、r2 == 0がポイントAにある可能性はありますか?

// the location 0xdeadbeef has a zero initial value 
ldr r0, =0xdeadbeef 
ldr r1, =0xdeadbeef 
ldr r2, =1 
str r2, [r0] 
ldr r2, [r1] 
// point a 
+0

スーパスカラ・アウト・オブ・オーダーのシングルプロセッサに関連している可能性があります。プロセッサのメモリモデルと命令セットによって実際に指定されるべきです。 (悪は細部にある)。 –

+0

@Basile:私はそうは思わない - 鉄則は、単一のプロセッサ上の単一のスレッドの実行は常に以下の理由で効果があることである。 –

答えて

2

メモリバリアおよびコンパイラの障壁があります対処仮定よりも優れています。

ハイパースレッディングが複数のプロセッサであるとは分かりませんが、コンパイラの障壁はコンパイラによって異なるスレッドのコードを並べ替えることができます。

0

メモリバリアは、「グローバル変数」にのみ使用する必要があります。ローカル(スタック内)とレジスタはスレッドの切り替え中に自動的に保存されるためです。

かもしれませ普遍性は、あなたが常にUP

関連する問題