1

複数のスレッドが CS を取得しようとする場合は気にしません。1 つのスレッドが CS をロックおよびロック解除する場合はどうでしょうか? 現在のマルチコア CPU (x86 および ARM) でどのように動作するかに特に興味があります。

私の単純な推測に基づいて、ロックカウントがあり、スレッドが CS を取得しようとすると、インターロック交換/追加が行われると思います。この交換/追加は、他のコア/スレッドに何らかの影響を与えますか? たとえば、コアには独自のメモリキャッシュがあり (私は正しいですか?)、インターロックされた交換/追加は、RAM の一部が他の場所にキャッシュされていないことを確認するために、他のすべてのコアとやり取りする必要があります。

データにアクセスするための複数のスレッドを持たない場所に CS を追加する方が、複数のスレッドをめったに使用しない可能性のある場所にある CS を見逃すよりも優れていると思います。しかし、ループ内の CS に入る/存在するスレッドがある場合、舞台裏で CPU 間の同期が行われているため、他のコア/スレッドが停止しないことを確認したいと思います。

ありがとう

4

1 に答える 1

1

コアが単一のキャッシュを共有しないSMPシステムは、メモリの場所が一度に複数のキャッシュに存在するという最終的な事態に備えて、キャッシュコヒーレンシロジックを提供する必要があります。クリティカルセクションがスピンロックとして実装されている場合、これは理論的ではありませんが、可能性が高いです。

インターロックされた交換/追加は、キャッシュの同期のために潜在的に非常に高価です。これは特に、コアのペア間のリンクが他のペアよりもかなり遅いNUMAシステムの場合に当てはまりました。

ARMは、SWP命令(インターロック交換)を、かなり安価なはずのわずかに異なる戦略に置き換えました。

クリティカルセクションの相対的なパフォーマンスに関する質問に答えるには、それがどれだけ重いかは、その実装方法によって異なります。最近のLinuxシステムは、ユーザースペースのロックをチェックし、競合する場合にのみカーネルを呼び出します(たとえば、待機するか、ウェイターのブロックを解除する)。これは、ゲイを放棄してクリティカルセクションを使用でき、コストについてあまり心配しないことを意味します(特に、ARMv7システムの場合)。

他のオペレーティングシステムは、カーネルスペースにロット全体を実装しているため、クリティカルセクションでの操作はコストがかかります。

競合状態が発生する可能性がある場合は、それから保護する必要があります。このパフォーマンスが気になる場合は、キューイングを使用してスレッドを分離するようにアーキテクチャを変更することを検討してください。

于 2012-09-23T18:41:22.077 に答える