8

GPGPU と新しい C++ AMP ライブラリに関する Herb Sutter によるこのビデオを見ています。彼はメモリ モデルについて話し、弱いメモリ モデル、次に強いメモリ モデルについて言及しています。また、読み取り/書き込みの順序などについて言及していると思いますが、よくわかりません。

Google はメモリ モデルに関するいくつかの興味深い結果 (主に科学論文) を出していますが、誰かが弱いメモリ モデルとは何か、強いメモリ モデルとは何か、およびそれらと同時実行性との関係を説明できますか?

4

4 に答える 4

6

この 2 つの用語は明確に定義されておらず、白黒の問題ではありません。

メモリ モデルは、非常に弱い場合もあれば、非常に強い場合も、その中間の場合もあります。

基本的には、同時メモリアクセスに関して提供される保証を指します。

単純に、1 つのスレッドで行われた書き込みは、他のすべてのスレッドにすぐに表示されると予想します。また、すべてのスレッドでイベントが同じ順序で表示されることも期待できます。

しかし、より弱い記憶モデルでは、どちらも成り立たないかもしれません。

順次整合性は、イベントがすべてのスレッドで同じ順序で表示されることを保証するメモリ モデルの用語です。したがって、シーケンシャルな一貫性を保証するメモリ モデルは非常に強力です。

より弱い保証は、因果的一貫性です。つまり、イベントが依存するイベントの後に観察されるという保証です。

つまり、最初xにあるアドレスAに値を書き込み、次に同じアドレスに 2 番目の値を書き込むと、値を読み取った後にその値を読み取るyスレッドはありませ。2 つの書き込みは同じアドレスに対するものであるため、すべてのスレッドが同じ順序を観察しないと、因果的一貫性に違反します。しかし、これは、無関係なイベントに何が起こるべきかについては何も言いません。3 番目の値を別のメモリ アドレスに書き込んだ結果は、他のスレッドによっていつでも観察される可能性があります(したがって、順次整合性の下とは異なり、別のスレッドは異なる順序でイベントを観察する可能性があります)。yx

このような「一貫性」のレベルは他にもたくさんあり、強いものもあれば弱いものもあり、信頼できるものについてあらゆる種類の微妙な保証を提供します。

基本的に、より強力なメモリ モデルは、イベントが観察される順序についてより多くの保証を提供し、通常は直感的に期待するものに近い動作を保証します。

ただし、モデルが弱いほど、最適化の余地が大きくなり、特に、より多くのコアでより適切にスケーリングされます (必要な同期が少ないため)。

シーケンシャル整合性は、シングルコア CPU では基本的に無料で、クアッドコアでは実行可能ですが、32 コア システムまたは 4 つの物理 CPU を備えたシステムでは非常に高価になります。または、複数の物理マシン間の共有メモリ システム。

コアの数が多いほど、それらが離れているほど、すべてが同じ順序でイベントを監視することを保証することが難しくなります。したがって、妥協が行われ、より緩い保証を行う、より弱いメモリ モデルに落ち着きます。

于 2011-08-27T15:17:25.067 に答える
4

はい、その通りです。弱いメモリモデルと強いメモリモデルの違いは、使用可能な最適化の違い(読み取り/書き込みの順序と関連するフェンス)の違いです。

逐次一貫性のあるモデル(最も制限の厳しい、または最も強力なモデル)から始めてメモリモデルを指定し、次に単一スレッドからの読み取りと書き込みを相互に導入、削除、または移動する方法を指定できます。

このモデル(逐次一貫性)では、メモリはそれを使用するプロセッサ(スレッド)から独立しています。メモリは、各スレッドからの読み取りおよび書き込み要求を供給するコントローラーによって各スレッドに接続されます。単一のスレッドからの読み取りと書き込みは、スレッドで指定された順序でメモリに到達します、他のスレッドからの読み取りと書き込みと不特定の方法でインターリーブされる可能性があります

マルチスレッドアプリでのローロック技術の影響を理解する

ただし、連続的に一貫性のあるモデルと他のモデルを考慮しない限り、強いメモリモデルと弱いメモリモデルの間に正確な境界はありません。それらのいくつかは、他のものよりも強い/弱いため、並べ替えによる最適化に対してよりオープンです。たとえば、.NET 2.0 for x86のメモリモデルでは、.NET 1.1のバージョンよりも少し多くの最適化が可能であるため、より弱いモデルと見なすことができます。

于 2011-08-27T14:26:43.330 に答える
2

Google はメモリ モデルに関するいくつかの興味深い結果 (主に科学論文) を出していますが、誰かが弱いメモリ モデルとは何か、強いメモリ モデルとは何か、および同時実行性との関係を説明できますか?

ストロング メモリ モデルとは、他のコアの観点からは、読み取りと書き込みがプログラムに表示されたとおりに、特にプログラムに表示された順序で行われるように見えるモデルです。これは、順次整合性と呼ばれます。

弱いメモリ モデルは、CPU によってメモリ実行が変更される可能性があるモデルです。すべての実用的な CPU アーキテクチャでは、命令を並べ替えることができます。

Herb Sutter は、"強力なメモリ モデル" を使用して、アトミックな組み込み関数が並べ替えられないモデルを意味することに注意してください。これは一般に受け入れられている定義ではありません。

于 2015-01-11T18:17:22.827 に答える