プログラムがどのようにマルチスレッドに対応する必要があるかを考えると、私のチームは、シングルコアCPUでは絶対にできないことはないかと困惑しました。グラフィック処理には大規模な並列処理が必要であると仮定しましたが、DOOMなどの処理はGPUのないシングルコアCPUで行われたと主張しています。
マルチコアプロセッサで実行する必要があるものはありますか?
開発と実行の両方に無限の時間があると仮定します。
プログラムがどのようにマルチスレッドに対応する必要があるかを考えると、私のチームは、シングルコアCPUでは絶対にできないことはないかと困惑しました。グラフィック処理には大規模な並列処理が必要であると仮定しましたが、DOOMなどの処理はGPUのないシングルコアCPUで行われたと主張しています。
マルチコアプロセッサで実行する必要があるものはありますか?
開発と実行の両方に無限の時間があると仮定します。
回答:
問題は、どのような制約の下ですか?
「一定の時間内にハードウェアXでこの問題を解決できるか」という質問をすると、答えはノーになります。
しかし、これは「将来性のある」答えではありません。これまでは単一のコアで十分に高速に実行できなかったことが今ではあり得、将来のハードウェアがどのような能力を持つかを予測できません。
計算可能性の観点から、シングルテープチューリングマシンはシングルまたはマルチコアコンピューターと同じ機能をすべて計算できるため、ランタイムは別にして、マルチコアコンピューターがそれを解決できるという問題はありません。シングルコアではできません。
グラフィックのようなものに関しては、GPU上にあるすべてのものをCPU上で実行できます。
他の回答が指摘しているように、時間をスライスして各仮想CPUの役割を果たすことにより、単一のCPUが常に複数のCPUをエミュレートできます。このエミュレーションは確かに正しい答えを計算します。
現実の世界では、実行時間が重要になる場合があります。それは、平凡なフレームレートと恒星の視覚体験の違いを意味する可能性があります。または取引の利益と損失の違い。
マルチプロセッサがユニプロセッサよりも非常に高速である病理学的状況の1つは、処理がデータパイプラインであり、コンテキストスイッチングが高価であり、各パイプラインステージのマシンコードがCPUのキャッシュにほとんど収まらない場合です。
いくつかの数字で説明しましょう。4つの処理ステージを持つデータパイプライン(3Dレンダリングなど)があり、各ステージに256 KiBのプログラムコードがあり、256 KiBのL2キャッシュを備えた4つのCPUがあると仮定します。単一のCPUでこの処理を実行しようとすると、4つのタスク間の切り替えに費用がかかり、キャッシュミスが大きくなります。一方、4コアシステムで実行すると、計算が非常にスムーズになり、キャッシュミスが最小限に抑えられ、コンテキストスイッチが存在しなくなります。(補足として、これは特定のアプリケーションを特定のコアに固定するという概念に関連しています-たとえば、1つのコアでOSカーネル操作のみを行う、TCP / IP処理など)
単一のCPUで非常に悪質なデータ競合を開発するのははるかに困難です。確かに、単一のCPUに割り込みをかけると、単語間の裂け目をなくすことができますが、必要なことを行うスレッドの単一インターリーブが存在しないエキゾチックなシナリオを構築できますか?
さて、たぶん陰湿なバグを作成することは、マルチコードの進歩の有効な使用としてカウントされません。結局のところ、マルチコアがシングルコアで時間を与えられないということはあまりありません。その理由は簡単です。これらの悪のデータ競合を回避しようとすると、コードに同期ポイントが必要になります。コードを計算のラティスとしてモデル化すると、出力を計算および生成する前に1つの入力を完了して同期する必要がある場合、単一のCPUがラティスに沿って単純に機能し、次の利用可能な作業ブロックを計算できることが容易にわかります。
実際、チューリングマシン(私たちが気にしているほぼすべてのアルゴリズム)によってアルゴリズムを解決できることを実証できれば、アルゴリズムはシングルコアCPUだけでなく、実際にはメモリ用の非常に長いテープを備えたステートマシン!
CHESSのレース検出器は、実際のレースの例を見つけるために、これを利用しています。すべてのシングルスレッドを実行し、スレッド間のすべての可能なインターリーブを体系的に調査し、レースケースのためにテストが失敗するケースを見つけようとします。CHESS は、シングルコアでマルチスレッドアプリケーションを実行できるという事実に依存しています。
マルチコアが必要な場合は、ハードウェアの限界を広げ始めるときに現れます。明らかなのは、時間の制約がある場合です。リアルタイムの制約に関する問題の中には、シングルコアのクロックを十分に高速に駆動できないために、シングルコアを実行できないものがあります。CPUが4Ghzに達してから少し落ち着き、低速でより多くのコアを好む理由があります。
このタイミング制約のよりエキゾチックなバージョンは、ハードリアルタイムシステムにあります。一部のハードリアルタイムシステムでは、割り込みのサービスが非常に要求されるため、実際には、コア間で割り込みを分割できるマルチコアCPUを選択するか、タイミングの制限に直面する必要があります。
データバスには別の制限があります。例としてBlue Gene / Pを検討してください。特定のBlue Gene / PスーパーコンピューターであるJUGENEには、144 テラバイトのメモリがあります。彼らは単純に、そのすべてのメモリにアクセスできるシングルCPUコンピューターを作成しません。
他の答えは、並列性を「分散並行性」としての限られた見方に従っています。これにより、いくつかの答えが得られます。チューリングのような計算のクリーンモデルでは、複数のコアには利点がありません。あなたが得る唯一の利点は効率です。
ある動作を実行する:一つ複数の処理ユニット(PUの)が単一のものが、しかしすることができないことを行うことができ平行であること、同時に。
これは、複数のプログラムを同時に実行する場合に非常に便利です。確かに、同時実行以上のものを絶対に必要とすることはまれであり、ほとんどの使用法は効率の向上につながります。しかし、そこにあるこの差は。
複数のソースからのデータセンサーデータをリアルタイムで処理する必要があるとします。それがアプリケーションで正確に何を意味するにせよ、1つのPUは、応答時間の制限に違反することなく、非常に多くの入力ストリームのみを同時に処理できます。したがって、現在のPU世代に対してセンサーが多すぎる場合は、複数のPU が必要です。
CS povから、「マルチコア」は「分散コンピューティング」と理論的にそれほど違いはありません。基本的な概念は「独立した計算要素(並列計算)です。したがって、質問を少し言い換えると(「マルチコア」は実際にはCSの理論的概念ではありません)、他の可能性につながります。 CS povからの並列プログラミングに相当します。これは、コンピューティングの理論的システム、つまりチューリングマシンの定義に戻ります。CSパフォーマンスの理論的分析は、最終的に並列と順次の区別が実際に適用されないTMただし、マルチテープTMには多少の大まかな類似性があります)。
しかし、この質問を抽象的ではないことを考慮すると、フォールトトレランスに関連するいくつかの問題には、分散コンピューティングが実際に優れているか、場合によってはほぼ必要です。この領域には、独立したコンピューティング要素がある程度の信頼性を持たない場合/どこに適用されるかという概念があります (これは実際にすべてのコンテキストに普遍的に適用可能な仮定ではありません)。ここでは、独立したコンピューティング要素を使用してフォールトトレランスが向上する、または必要になる場合もあります。
各プロセッサは、計算中に失敗する独立した「[x]%」チャンスがあると考えてください。通信を介してシステム全体の耐障害性が個々のコンポーネントよりも優れているシステムを考案できます。これは何十年も前に、たとえばスペースシャトルシステムで適用されました。最近では、いわゆるコンセンサス問題を解決するPaxosなど、それを利用するために設計された基本的なプロトコルがあります。より現実的な例としては、Googleが独自のアルゴリズムを多数備えており、個々の信頼性の低い要素とフォールトトレラントアルゴリズムを組み合わせてスーパーコンピューターを構築します。
ビットコインには、台帳を計算するための分散トランザクションが含まれますが、これは単なる処理負荷の問題によるものではありません。アルゴリズムは、破損したノードを阻止するように慎重に設計されています。要するに、単に並列パフォーマンスを最大化するだけではなく、ビザンチン将軍の問題を「解決」/実装します。独立したエンティティが互いに「チェック」し、「アルゴリズム/暗号化/安全」が無効な計算別名「不正行為」または「不正行為」を拒否します破損」。
並列処理の古典的な分析では、特定の並列実行の内訳に分解される約7つの「基本的な」問題パターンタイプがあると結論付けられています。The Parallel Landscape of Berkeleyからの展望をご覧ください。
ここには、他のほとんどの回答で取り上げられているパフォーマンスの考慮事項について、未解決の理論的質問の要素がいくつかあります。逐次よりも「本質的に高速」な並列問題があるかどうかの問題は、NCが「効率的に並列化可能な」アルゴリズムのクラスと見なされ、Pが「効率的な[順次]アルゴリズム」