質問

私はこの情報をオンラインで見つけるのにいくつかの本当の問題を抱えています。システムにマルチコアプロセッサがある場合、各プロセッサは、準備が整ったキューの最初のプロセスからスレッドを取得しますか、それとも最初のプロセスから1つ、2番目のプロセスを使用しますか?また、チェックするために、OSが右にマルチキロから同時にマルチキースから送信され、フェッチされますか?誰かが私を正しい方向に向けてリソースを賢く指摘できれば、それは素晴らしいことです!

役に立ちましたか?

解決

重要なことは、マシンのアーキテクチャが実際に何であるかを理解することです。

「コア」は、システムメモリに接続するキャッシュを備えたCPUです。ほとんどのマシンアーキテクチャは対称的なマルチプロセスです。つまり、システムメモリは、システム内のすべてのコアが等しくアクセスできます。

ほとんどのオペレーティングシステムは、各コアでスケジューラスレッドを実行します(Linuxは実行します)。スケジューラには、責任あるスレッドのリストがあり、制御するコアでその能力を最大限に発揮します。実行するスレッドを選択するために使用するルールは、ロビンのラウンド、または優先度ベースなどのいずれかです。つまり、通常のすべてのスケジューリングルール。これまでのところ、単一のコアコンピューターで見つけるスケジューラのようなものです。ある程度、各スケジューラは他のすべてのスケジューラから独立しています。

ただし、これはSMP環境です。これは、どのコアがどのスレッドを実行するかは実際には問題ではないことを意味します。これは、すべてのコアがすべてのメモリを見ることができ、システム全体のすべてのスレッドのすべてのコードとデータがその単一メモリに保存されるためです。

したがって、スケジューラはお互いを助けるために自分自身の間で話します。実行するスレッドが多すぎるスケジューラは、コアが使用されているコアが使用されているスケジューラにスレッドを渡すことができます。彼らはマシン内で負荷分散しています。 「スレッドを渡す」とは、スレッド(スレッドID、どのデータをコードするか)を記述するデータ構造をコピーすることを意味します。

それについてです。コア間の唯一の通信はメモリを介しているため、すべてが使用可能な効果的な相互除外セマフォシステムに依存しています。これは、ハードウェアが許可するものです。

難しさ

だから私は非常にシンプルな絵を描きましたが、実際には記憶は完全に対称的ではありません。最近のSMPは、ハイパートランスポートとQPIの上で合成されています。

コアが実際に電子レベルでシステムメモリに平等にアクセスできる時代は過ぎ去りました。アーキテクチャの最低層には、AMDは純粋にnumaであり、Intelはほぼそうです。

現在、コアは、添付のメモリに入ったデータを送信するように依頼する高速シリアルリンク(HypertransportまたはQPI)を介して他のコアにリクエストを送信する必要があります。 IntelとAMDは、一般的なケースではSMPのように説得力のあるように見えるようにするのに良い仕事をしましたが、それは完璧ではありません。別のコアに添付されたメモリ内のデータは、手に入れるのに時間がかかります。それは非常に複雑です - コアは現在ネットワーク上のノードになりました - しかし、それはパフォーマンスを改善するために彼らがしなければならなかったことです。

したがって、スケジューラは、どのコアがどのスレッドを実行するかを選択するときにそれを考慮に入れます。彼らは、スレッドがアクセスできるデータを保持しているメモリに最も近いコアにスレッドを配置しようとします。

再び未来

世界のソフトウェアエコシステムをSMPから引き離すことができれば、ハードウェアの人はシリコン上の多くのスペースを節約できるでしょう。これは以前に行われました。トランスパーターは、厳密にヌクラアーキテクチャの良い試みでした。

numaと通信シーケンシャルプロセスにより、今日のSMP共有メモリベヒーモスよりも非常に簡単にスケーリングし、より効率的に実行されるマルチスレッドソフトウェアの作成がはるかに簡単になります。

SMPは、実際には複数のコアをまとめる安価で厄介な方法であり、ソフトウェア開発の困難と非効率的なハードウェアのコストは非常に高くなっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top