10

最新のプログラミング言語は、並列処理と同時実行メカニズムを第一級市民としてユーザーに提供します。並列アルゴリズムがどのようにプログラムされているかを理解しており、マルチコア CPU で 2 つのスレッドを並列に実行する方法をよく想像できます。

ただし、これらのプラットフォームのほとんどは、単一スレッドでの並列プロセスの実行もサポートしています。

  • これらのプロセスは本当に並行して実行されますか?
  • アセンブリ レベルで、2 つの異なるルーチンを 1 つのスレッドで同時に実行するにはどうすればよいでしょうか?
4

2 に答える 2

9

TLTR; :単一の非ハイパースレッディング CPU コアでの並列処理 (真の同時実行という意味で) は不可能です。


ハードウェア(<- EDIT) 並列処理は、いくつかのレベルで実現できます。粒度の降順:

  1. マルチホスト
  2. マルチプロセッサ
  3. マルチコア
  4. マルチスレッド(「ハイパースレッディング」、つまり「HT」)(編集:同じコアで複数のALUを駆動できるベクトル化された計算のケースは自発的に省略します)

あなたの質問は、ケース3(HTが利用できない/無効になっている場合)または4で2つのソフトウェアスレッドを実行することに関連しています。

  • どちらの場合も、プロセスは実際には並行して実行されません。ユーザーは、CPU レベルで実行される非常に高速なコンテキスト スイッチにより、同時性の印象を受けます。これは、物理コア (それぞれのスレッド) 時間をいずれかのソフトウェア スレッドに順番に割り当てる傾向があります。

  • どちらの場合も、これらのルーチンは同時に実行されるのではなく、順番に実行されます。

これら2つのルーチンのそれぞれに割り当てられる相対的な優先度は、プロセスに与える「優先度」によってさまざまなOSで設定できます。これは、OSのスケジューラによって処理され、CPU時間が割り当てられます。

HTH。

このトピックをよりよく理解するためのテストを実行するには、「CPU アフィニティ」をグーグルで検索することをお勧めします。これにより、マルチコア CPU の 1 つの物理シングル コアで 2 スレッド プロセスを実行し、各スレッドの優先度を変更しながら、各スレッドにかかる時間を計ることができます。

于 2012-04-20T11:36:34.203 に答える
2

はい、各スレッドに並列処理があり、使用するプログラミング言語に関係なく無料で入手できます (ただし、並列処理の量は異なる場合があります)。

これは、命令レベルの並列処理と呼ばれます。詳細は非常に複雑で、プロセッサのマイクロアーキテクチャによって異なります。

Computer Architecture: A Quantitative Approachは、命令レベルの並列処理に関する章を含む素晴らしい本であり、その例はエンジニアリングについて合理的に考える方法を教えています。

詳細については、次のリンクを参照してください。

http://en.wikipedia.org/wiki/Superscalar

http://en.wikipedia.org/wiki/Instruction_pipelining

http://en.wikipedia.org/wiki/Out-of-order_execution

于 2013-05-12T19:04:03.557 に答える