7

現代のプログラミング言語は、一流の市民として並列性と並行性のメカニズムをユーザに提供します。私は並列アルゴリズムがどのようにプログラムされているかを理解しており、マルチコアCPU上の2つのスレッドがどのように並行して動作するかをよく想像することができます。シングルスレッド/コアの並列処理はどのように可能ですか?

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

  • これらのプロセスは実際には並行して実行されますか?
  • アセンブリレベルでは、1つのスレッドで2つの異なるルーチンを同時に実行できますか?

答えて

6

TLTR; :ハイパースレッディングされていないシングルCPUコア上での並列処理(真実の意味でsimultanenous実行)は不可能です。


ハードウェア(< - EDIT)PARALELLISMはいくつかのレベルで達成することができます。粒度を減少させることによって命じ:

  1. マルチホスト
  2. マルチプロセッサ
  3. マルチコア
  4. マルチスレッド( "ハイパースレッディング"、すなわち、 "HT") (EDIT:I voluntarityあなたの質問は例3で2つのソフトウェアスレッドを実行に関し、いくつかのALUはは、同じコアでを駆動することができるベクトル化compuationsの場合)

を省略します。 (HTが使用できない/使用不可の場合)または4.

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

  • 場合によっては、これらのルーチンは、単に同時に実行されるのではなく、順次

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

HTH。

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

+0

を(4)二つの異なる物事をミックス。 HTは、2つのスレッド間の高速切り替えを可能にするハードウェアサポートです(したがって、あるスレッドがメモリからデータを待っている場合は、もう一方のスレッドが引き継ぐことができます)。ソフトウェアレベルで「単純な」スレッドである(5)もあります。 4と5の両方が、動作が並列に起こる「真の」スレッドではないが、一部の動作(または部分的な動作)が他のハイパースレッドと並行して発生する可能性があるため、(4)たとえば、1つのハイパースレッドのメモリフェッチは、他のスレッドが実行されている間に発生する可能性があります。 –

+0

@adrew cooke:リストを洗練してくれてありがとう。私は故意に(ソフトウェアの)並列性のためにリストには含めなかったので、あなたは正しいです(私は最初の投稿を修正しています)。 –

+0

-1:すべての最新のCPUは、命令レベルで並列性を提供します。私の答えを見てください。 –

1

はい、そこに各スレッドで並列性がであり、どのプログラミング言語を使用していても(並列処理の量は異なるかもしれませんが)、無料で入手できます。

instruction-level parallelismと呼ばれています。詳細は非常に複雑で、異なるプロセッサのマイクロアーキテクチャによって異なります。

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

関連する問題