回答:
うまくいけば、彼らは明示的に「アトミックのみで構成されるプログラムはSC-DRFではレースフリーである」と明示的に述べなかったと思います。不正解です。
「[in]スコープ同期...アトミックがスコープを正しく使用しない場合、アトミックで完全に構成されるレースプログラムを作成することは可能です」[2ページの上部]とわずかに異なります(そして「racey」という単語を曖昧に使用しているため、おそらく誤ったステートメントを意味すると信じるようになります。)代わりに、スコープ付き同期では、アトミックで完全に構成されている非順次一貫性のあるプログラムを書くことが可能であると述べたはずですスコープを正しく使用しないでください。
SC-DRF(大まかに:C ++およびJavaのメモリセマンティクス)は、メモリの場所を、同期オブジェクト(と呼ばれることもあるatomics
)とデータオブジェクトの2つのクラスに分割します。ほとんどの場合、同期オブジェクトに対するすべての操作は、順次一貫していることが保証されています。[1](競合なしではありません。)これは、プログラマーではなく、コンパイラーの制約です。1つのスレッドがアトミックオブジェクトa
を書き込みb
、次にアトミックオブジェクトを書き込むとプログラマが言った場合、すべてスレッドは、書き込みがこの順序で行われることを確認します。(コンパイラーはアクセスの順序を変更することを許可されておらず、順次一貫していないマシンに適切なメモリー・バリアとフェンスを挿入する必要があります。)
順次一貫性とは、すべてのプロセッサのすべてのスレッドが、すべてのメモリ操作の合計順序に同意することを意味します。1つのスレッドがその操作を考えている場合 手術前に起こった、すべてのスレッドがその操作を考える 手術前に起こった。シーケンシャルに一貫性があるということは、競争が激しいという意味ではなく、決定論的という意味でもありません。たとえば、2つの異なるスレッドがほぼ同時に同じ同期変数を書き込もうとする可能性があります。これらのアクセスは不安定になります。順次一貫したシステムは、1つのスレッドがその書き込みを 書く前に起こった 、すべてのスレッドが書き込みに同意します 書く前に起こった 。逐次一貫性は、ミューテックスや条件変数などの有用な非決定的同期オブジェクトを構築して推論できるため、便利です。
SC-DRFは、と言っている場合は、あなたのプログラムがあるデータレース無料、上の操作データオブジェクトがします表示されるように順次一貫。コンパイラーは、データオブジェクトの操作を並べ替えたり(場合によっては削除したり)することができます。基盤となるマシンが順次一貫していない場合、コンパイラーはメモリバリアまたはフェンスを挿入する必要はありません。 ただし、コンパイラーは、同期オブジェクトの操作に関して、データオブジェクトの操作を並べ替えることはできません。
データのレースフリーは、レースフリーと同じではありません。そして、逐次一貫性は、レースフリーと同じではありません。特定のプログラムの実行スケジュールがあるデータ、データオブジェクトのアクセスのいずれかのペアの場合は無料レース そして 、2つの異なるスレッド(少なくとも1つは書き込み操作)により、アトミックオブジェクトアクセスの(順次的に一貫した)順序を使用して、 前に起こった または 前に起こった 。証明ができない場合、その実行スケジュールはデータの競争が激しいです。
プログラムは、あるデータ競合の無料すべての可能な実行スケジュールが無料データ競合している場合。データレース状の実行スケジュールがある場合、プログラムはデータレース状です。
ビーイングデータレース無料はプログラマではなく、コンパイラの制約です。それはあなたのプログラムがデータのレースであるならば、あなたのプログラムには意味論がないと言います。コンパイラーは、プログラムの停止、無限ループへの移行、コンピューターの爆破など、必要なことをすべて実行できます。
まあ。 TL; DR! SC-for-HRCについてはまだ触れていません。
SC-for-HRCでは、アトミックはどのスコープに属するかを指定する必要があります。アトミックアクセスは、(コンパイラによって)独自のスコープ内でのみ順番に一貫していることが保証されています。スコープ内のすべてのスレッドは、アトミックアクセスが発生する順序について同意しますが、別のスコープ内のスレッドは同意しない場合があります(その順序はもちろん、アクセスをまったく表示できない場合もあります)。
たとえば、スレッド19がミューテックスAを取得してからミューテックスBを取得することにすべてのGPUスレッドが同意するが、すべてのCPUスレッドがスレッド19がミューテックスAまたはミューテックスBを取得することにまったく同意しない(または知らない)場合があります。SC-DRFには「スコープ」がないため、この問題は発生しません。
[1]順次一貫したアトミックの例外は、を明示的に使用することと関係がありstd::memory_order_relaxed
ます。だからそれをしないでください。(そして、私が言っている残りの部分では例外を無視します。)