誰かが私がプレゼンテーションに取り組んでいるのを手伝ってくれますか?-「マルチコアプログラミングと並行プログラミングの違い」について少し説明したいと思います。:)
ありがとう、
エーモン
誰かが私がプレゼンテーションに取り組んでいるのを手伝ってくれますか?-「マルチコアプログラミングと並行プログラミングの違い」について少し説明したいと思います。:)
ありがとう、
エーモン
同時 (同時に発生または同時に存在する)は、異なるコードがまったく同じサイクルで実行される可能性があることを意味します。これは、複数のプロセッサまたは複数のコアを備えたプロセッサが利用可能であり、プログラムが正しく作成されている場合、物事が並行して発生する可能性があることを意味します。スレッドを追加するだけでは、同時実行を意味するものではありません。
私がMAYと言う理由は、プログラムの個別のスレッドが揮発性/可変状態を共有する必要があるときはいつでも、その状態にアクセスする必要がある他のスレッドは実行を継続できず、その状態にアクセスするために順番を待たなければならないためです。再び連続して。
上記のようなリソースの競合がない場合、通常、これは、別のスレッドと同じ正確なサイクルで同時にコードを実行する複数のスレッドとして、単一のプログラムに実装されます。これには、複数の物理プロセッサまたはコアが必要です。他のモデルは、同時に実行できる複数のヘビーウェイトOSプロセスを実行します。
並行プログラミングは、可変の共有状態で正しく行うのは非常に困難です。
単一のシングルコアプロセッサでシリアルに実行される並行プログラムを作成できますが、より多くのプロセッサまたはコア、あるいは複数のコアを持つ複数のプロセッサが存在する場合は、同時により多くのことを実行するようにスケールアップします。
シングルスレッドプログラムが独立した範囲の入力データで同時に動作できる場合は、マルチコア/マルチプロセッサシステムで同時に表示されるようにすることもできます。例:シングルスレッドの3Dレンダリングプログラムは、デュアルコアマシンで2つの別々のインスタンスを実行でき、最初はすべての奇数フレームをレンダリングし、2番目はすべての偶数フレームをレンダリングします。変更可能なリソースを共有しようとしない限り。
マルチコアとは、単一のCPUに複数のプロセッサコアがあり、スレッドまたはプロセスを同時に実行でき、通常、オペレーティングシステムの主流には複数のプロセッサとして表示されることを意味します。
シングルスレッドのプログラムが、利用可能な追加のプロセッサコアから同時実行動作または利益を得るという意味ではありません。
並行プログラミングはより広範であり、「同時に」実行されるソフトウェアを作成することを指します。つまり、一度に複数のことが起こります。
「マルチコア」プログラミングとは、実際には並行プログラミングの特定のサブセットを指し、特定のマシンで使用可能な複数のCPUコアをターゲットにしています。これは並行プログラミングの最も一般的な形式(通常、単一のコンピューターで実行される単一のプロセス)ですが、それでも並行プログラミングの1つの形式にすぎません。
CPUコアが1つしかないマシンで並行プログラミングを行うことができます。オペレーティングシステムは、複数のスレッドが同時に実行されているように見せかけ、スレッド間をすばやく切り替えます。
2つのスレッドが2つのコアで同時に実行される可能性があるため、複数のコアを備えたマシンでは、このコンテキスト切り替えの頻度を減らす必要があります。スレッドのバグはあなたの人生をはるかに速く困難にする可能性があるので、それは少し特別です。2つのスレッドが共有メモリの場所に同時にアクセスしようとする確率ははるかに高くなります。
大まかに言えば、マルチコアはコンピュータのプロセッサチップの属性です。マルチコアとは、複数のプロセッシングコアを備えていることを意味します。マルチプロセッサコンピュータにはいくつかの種類があります。イーサネットを介して接続された数千台のコンピュータを備えた古いスタイルのスーパーコンピュータ、プロセッサを超えるシステム(2つのPentium 4など)、およびすべてのプロセッサパッケージに複数の処理コアを備えた最新のマルチコアシステム9 Intel i7)。3番目のタイプは、チップマルチプロセッサ(CMP)のマルチコアと呼ばれることがよくあります。
並行プログラミングはソフトウェアの属性です。並行プログラミングとは、プロセッサが利用可能な場合に同時に実行できる複数のタスクに分割されたコードを記述することです。並行プログラムはマルチコアを活用しますが、並行プログラミングは2つの側面でより広くなります。
したがって、要約すると:
並行プログラミングとは、利用可能な場合に複数のプロセッサを使用できるソフトウェアに関するものです。これらのプロセッサは、同じチップ(マルチコアまたはチップマルチプロセッサ)または異なるチップ(SMPと呼ばれることが多い)上に配置できます。同じシステムに2つのマルチコアチップを配置して、CMPとSMPを同時に実行できるシステムを構築できます。並行プログラミングもそのために機能します。
並行プログラミング重複しているように見える操作を考慮し、主に非決定論的な制御フローが原因で発生する複雑さに関係します。並行プログラムに関連する定量的なコストは、通常、スループットと遅延の両方です。並行プログラムは多くの場合IOバウンドですが、常にではありません。たとえば、並行ガベージコレクターは完全にCPU上にあります。並行プログラムの教育学的な例は、Webクローラーです。このプログラムは、Webページの要求を開始し、ダウンロードの結果が利用可能になると同時に応答を受け入れ、すでにアクセスされた一連のページを蓄積します。プログラムが実行されるたびに応答が必ずしも同じ順序で受信されるとは限らないため、制御フローは非決定論的です。この特性により、並行プログラムのデバッグが非常に困難になる可能性があります。Erlang、F#非同期ワークフロー、およびScalaのAkkaライブラリは、高度な並行プログラミングへの最も有望なアプローチです。
マルチコアプログラミング並列プログラミングの特殊なケースです。並列プログラミングは、スループットを向上させるという特定の目標のために重複する操作に関係します。制御フローを決定論的にすることにより、並行プログラミングの難しさを回避します。通常、プログラムは並行して実行される子タスクのセットを生成し、親タスクはすべてのサブタスクが終了した後にのみ続行します。これにより、並行プログラムは並行プログラムよりもはるかに簡単にデバッグできます。並列プログラミングの難しい部分は、粒度や通信などの問題に関するパフォーマンスの最適化です。後者は、あるキャッシュから別のキャッシュへのデータの転送に関連するかなりのコストがあるため、マルチコアのコンテキストでは依然として問題です。Cilkは、マルチコアでの高性能並列プログラミングにとっておそらく最も有望なアプローチであり、IntelのスレッドビルディングブロックとMicrosoftのタスク並列ライブラリ(.NET 4)の両方で採用されています。