並列計算

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

並列計算は、多くの計算またはプロセスが同時に実行されるタイプの計算です。[1]大きな問題は多くの場合、小さな問題に分割され、同時に解決することができます。並列計算には、ビットレベル命令レベルデータタスク並列処理など、いくつかの異なる形式があります並列処理は、ハイパフォーマンスコンピューティングで長い間採用されてきましたが、周波数スケーリングを妨げる物理的制約により、幅広い関心を集めています[2]近年、コンピュータによる電力消費(およびその結果としての発熱)が懸念されるようになり、[3]並列コンピューティングは、主にマルチコアプロセッサの形でコンピュータアーキテクチャの主要なパラダイムになりました。[4]

並列コンピューティングは並行コンピューティングと密接に関連しています。これらは頻繁に一緒に使用され、しばしば混同されますが、2つは異なります。並列処理なしの並列処理(ビットレベルの並列処理など)と、並列処理なしの並列処理(マルチタスクなど)が可能です。シングルコアCPUでのタイムシェアリングによる)。[5] [6]並列コンピューティングでは、計算タスクは通常、いくつかの、多くの場合、非常によく似たサブタスクに分割されます。これらのサブタスクは、独立して処理でき、完了時に結果が結合されます。対照的に、並行コンピューティングでは、さまざまなプロセスが関連するタスクに対応していないことがよくあります。分散コンピューティングで一般的であるように、そうするとき、個別のタスクはさまざまな性質を持っている可能性があり、実行中にプロセス間通信が必要になることがよくあります。

並列コンピューターは、ハードウェアが並列処理をサポートするレベルに応じて大まかに分類できます。マルチコアおよびマルチプロセッサーコンピューターは、単一のマシン内に複数の処理要素を持ち、クラスターMPP、およびグリッドは、複数のコンピューターを使用して同じコンピューターで動作します。タスク。特定のタスクを高速化するために、特殊な並列コンピュータアーキテクチャが従来のプロセッサと一緒に使用されることがあります。

ビットレベルや命令レベルの並列処理など、並列処理はプログラマーにとって透過的である場合もありますが、明示的な並列アルゴリズム、特に同時実行を使用するアルゴリズムは、順次アルゴリズムよりも記述が困難です[ 7] 。競合状態が最も一般的な、潜在的なソフトウェアバグのクラス。異なるサブタスク間の通信同期は、通常、最適な並列プログラムのパフォーマンスを得る上での最大の障害のいくつかです。

並列化の結果としての単一プログラム高速化の理論上の上限は、アムダールの法則によって与えられます。

背景

伝統的に、コンピュータソフトウェアはシリアル計算用に書かれてきました問題を解決するために、アルゴリズムが構築され、命令のシリアルストリームとして実装されます。これらの命令は、1台のコンピューターの中央処理装置で実行されます。一度に実行できる命令は1つだけです。その命令が終了すると、次の命令が実行されます。[8]

一方、並列計算では、複数の処理要素を同時に使用して問題を解決します。これは、問題を独立した部分に分割して、各処理要素がアルゴリズムのその部分を他の要素と同時に実行できるようにすることで実現されます。処理要素は多様であり、複数のプロセッサを備えた単一のコンピュータ、複数のネットワーク化されたコンピュータ、専用のハードウェア、または上記の任意の組み合わせなどのリソースを含めることができます。[8]歴史的に並列コンピューティングは、科学計算と科学的問題のシミュレーション、特に気象学などの自然科学と工学科学で使用されていました。これにより、並列ハードウェアとソフトウェアの設計、および高性能コンピューティングが実現しました。[9]

周波数スケーリングは、 1980年代半ばから2004年までのコンピューターパフォーマンスの改善の主な理由でした。プログラムの実行時間は、命令の数に命令あたりの平均時間を掛けたものに等しくなります。他のすべてを一定に保ち、クロック周波数を上げると、命令の実行にかかる平均時間が短縮されます。したがって、頻度が増えると、すべての計算にバインドされたプログラムの実行時間が減少します[10]ただし、チップによる消費電力Pは、式P = C × V2 × Fで与えられます。ここで、C容量です。クロックサイクルごとに切り替えられ(入力が変化するトランジスタの数に比例)、V電圧Fはプロセッサ周波数(1秒あたりのサイクル数)です。[11]周波数が高くなると、プロセッサで使用される電力量が増加します。プロセッサの消費電力の増加は、最終的にIntelの2004年5月8日のTejasおよびJayhawkプロセッサのキャンセルにつながりました。これは、主要なコンピュータアーキテクチャパラダイムとして周波数スケーリングの終わりとして一般的に引用されています。[12]

消費電力と過熱の問題に対処するために、主要な中央処理装置(CPUまたはプロセッサー)メーカーは、複数のコアを備えた電力効率の高いプロセッサーの製造を開始しました。コアはプロセッサのコンピューティングユニットであり、マルチコアプロセッサでは、各コアは独立しており、同じメモリに同時にアクセスできます。マルチコアプロセッサは、デスクトップコンピュータに並列コンピューティングをもたらしました。したがって、シリアルプログラムの並列化は主流のプログラミングタスクになっています。2012年には、クアッドコアプロセッサがデスクトップコンピュータの標準になりましたが、サーバーには10コアプロセッサと12コアプロセッサが搭載されています。ムーアの法則からプロセッサあたりのコア数は18〜24か月ごとに2倍になると予測できます。これは、2020年以降、一般的なプロセッサに数十または数百のコアが搭載されることを意味する可能性があります。[13]

オペレーティングシステムは、さまざまなタスクとユーザープログラムが利用可能なコアで並行して実行されることを保証できますただし、シリアルソフトウェアプログラムがマルチコアアーキテクチャを最大限に活用するには、プログラマーはコードを再構築して並列化する必要があります。アプリケーションソフトウェアランタイムの高速化は、周波数スケーリングによって達成されなくなります。代わりに、プログラマーは、マルチコアアーキテクチャの増加する計算能力を利用するために、ソフトウェアコードを並列化する必要があります。[14]

アムダールの法則とグスタフソンの法則

アムダールの法則のグラフィック表現並列化によるプログラムの高速化は、並列化できるプログラムの量によって制限されます。たとえば、プログラムの90%を並列化できる場合、並列計算を使用した理論上の最大速度は、使用されているプロセッサの数に関係なく10倍になります。
タスクにABの2つの独立した部分があると仮定しますパートBは、計算全体の約25%の時間を要します。非常に一生懸命働くことで、この部分を5倍速くすることができるかもしれませんが、これは計算全体の時間を少しだけ短縮するだけです。対照的に、パートAを2倍速くするには、実行する必要のある作業が少なくて済みます。これにより、パートBのスピードアップは比率によって大きくなりますが(5倍対2倍) 、パートBを最適化するよりもはるかに高速に計算できます。

最適には、並列化によるスピードアップは直線的です。処理要素の数を2倍にすると、実行時間が半分になり、もう一度2倍にすると、実行時間が半分になります。ただし、最適な高速化を実現する並列アルゴリズムはほとんどありません。それらのほとんどは、少数の処理要素に対してほぼ線形のスピードアップを示し、多数の処理要素に対して一定の値に平坦化されます。

並列コンピューティングプラットフォームでのアルゴリズムの潜在的な高速化は、アムダールの法則によって与えられます[15]。

どこ

  • Sレイテンシーは、タスク全体の実行のレイテンシー潜在的なスピードアップです。
  • sは、タスクの並列化可能な部分の実行のレイテンシーの高速化です。
  • pは、並列化のタスクの並列化可能な部分に関するタスク全体の実行時間のパーセンテージです

Sレイテンシ<1 /(1- pであるため、並列化できないプログラムのごく一部が、並列化から得られる全体的なスピードアップを制限することを示しています。大きな数学または工学の問題を解決するプログラムは、通常、いくつかの並列化可能な部分といくつかの非並列化可能な(シリアル)部分で構成されます。プログラムの並列化できない部分が実行時間の10%を占める場合(p= 0.9)、追加されたプロセッサの数に関係なく、10倍以下のスピードアップを得ることができます。これにより、並列実行ユニットを追加することの有用性に上限が設定されます。「シーケンシャルな制約でタスクを分割できない場合、それ以上の努力をしてもスケジュールに影響はありません。割り当てられている女性の数に関係なく、子供の出産には9か月かかります。」[16]

グスタフソンの法則のグラフ表示

アムダールの法則は、問題のサイズが修正された場合にのみ適用されます。実際には、より多くのコンピューティングリソースが利用可能になると、それらはより大きな問題(より大きなデータセット)に使用される傾向があり、並列化可能な部分で費やされる時間は、本質的にシリアルな作業よりもはるかに速く増加することがよくあります。[17]この場合、グスタフソンの法則は、並列パフォーマンスの悲観的ではなく、より現実的な評価を提供します。[18]

アムダールの法則とグスタフソンの法則はどちらも、プログラムのシリアル部分の実行時間はプロセッサの数に依存しないことを前提としています。アムダールの法則は、問題全体が固定サイズであると想定しているため、並列で実行される作業の合計量もプロセッサの数に依存しませんが、グスタフソンの法則は、並列で実行される作業の合計量が次のように線形に変化すると想定しています。プロセッサの数

依存関係

データの依存関係を理解することは、並列アルゴリズムを実装する上で基本ですチェーン内の以前の計算に依存する計算は順番に実行する必要があるため、依存計算の最長チェーン(クリティカルパスと呼ばれる)よりも速く実行できるプログラムはありません。ただし、ほとんどのアルゴリズムは、依存する計算の長いチェーンだけで構成されているわけではありません。通常、独立した計算を並行して実行する機会があります。

PiPj2つのプログラムセグメントとします。バーンスタインの条件[19]は、2つが独立していて、並行して実行できる場合を示しています。P iの場合I iをすべての入力変数、O iを出力変数とし、同様にPjの場合も同様ですPiPjは、それらが満たす場合、独立しています

最初の条件に違反すると、最初のセグメントに対応するフロー依存関係が発生し、2番目のセグメントで使用される結果が生成されます。2番目の条件は、2番目のセグメントが最初のセグメントに必要な変数を生成する場合の反依存関係を表します。3番目の最後の条件は、出力の依存関係を表します。2つのセグメントが同じ場所に書き込む場合、結果は論理的に最後に実行されたセグメントから取得されます。[20]

いくつかの種類の依存関係を示す次の関数について考えてみます。

1:関数Dep(a、b)
2:c:= a * b
3:d:= 3 * c
4:終了機能

この例では、命令3は命令2の結果を使用するため、命令2の前に(または並列に)実行することはできません。これは条件1に違反するため、フロー依存関係が発生します。

1:関数NoDep(a、b)
2:c:= a * b
3:d:= 3 * b
4:e:= a + b
5:終了機能

この例では、命令間に依存関係がないため、すべてを並行して実行できます。

Bernsteinの条件では、異なるプロセス間でメモリを共有することはできません。そのためには、セマフォバリア、またはその他の同期方法など、アクセス間の順序付けを強制する何らかの手段が必要です。

競合状態、相互排除、同期、および並列スローダウン

並列プログラムのサブタスクは、スレッドと呼ばれることがよくあります。並列コンピュータアーキテクチャの中には、ファイバと呼ばれるスレッドの小さくて軽量なバージョンを使用するものもあれば、プロセスと呼ばれる大きなバージョンを使用するものもありますただし、「スレッド」は一般的にサブタスクの総称として受け入れられています。[21]スレッドは、オブジェクトまたは他のリソースへの同期アクセスを必要とすることがよくあります。たとえば、スレッド間で共有される変数を更新する必要がある場合などです。同期がない場合、2つのスレッド間の命令は任意の順序でインターリーブされる可能性があります。たとえば、次のプログラムについて考えてみます。

スレッドA スレッドB
1A:変数Vを読み取ります 1B:変数Vを読み取ります
2A:変数Vに1を追加します 2B:変数Vに1を追加します
3A:変数Vに書き戻します 3B:変数Vに書き戻す

命令1Bが1Aと3Aの間で実行される場合、または命令1Aが1Bと3Bの間で実行される場合、プログラムは誤ったデータを生成します。これは競合状態として知られています。プログラマーは、相互排除を提供するためにロックを使用する必要があります。ロックはプログラミング言語の構造であり、1つのスレッドが変数を制御し、その変数のロックが解除されるまで、他のスレッドが変数を読み書きできないようにします。ロックを保持しているスレッドは、クリティカルセクション(変数への排他的アクセスを必要とするプログラムのセクション)を自由に実行し、終了時にデータのロックを解除できます。したがって、プログラムの正しい実行を保証するために、上記のプログラムはロックを使用するように書き直すことができます。

スレッドA スレッドB
1A:変数Vをロックします 1B:変数Vをロックします
2A:変数Vを読み取ります 2B:変数Vを読み取ります
3A:変数Vに1を追加します 3B:変数Vに1を追加します
4A:変数Vに書き戻します 4B:変数Vに書き戻す
5A:変数Vのロックを解除します 5B:変数Vのロックを解除します

一方のスレッドは変数Vを正常にロックし、もう一方のスレッドはロックアウトされます—Vが再びロック解除されるまで続行できません。これにより、プログラムの正しい実行が保証されます。スレッドがリソースへのアクセスをシリアル化する必要がある場合、プログラムを正しく実行するためにロックが必要になる場合がありますが、ロックを使用するとプログラムの速度が大幅に低下し、プログラムの信頼性に影響を与える可能性があります。[22]

非アトミックロックを使用して複数の変数をロックすると、プログラムのデッドロックが発生する可能性があります。アトミックロックは、複数の変数を一度にロックします。それらすべてをロックできない場合、それらのいずれもロックしません。2つのスレッドがそれぞれ非アトミックロックを使用して同じ2つの変数をロックする必要がある場合、1つのスレッドがそれらの1つをロックし、2番目のスレッドが2番目の変数をロックする可能性があります。このような場合、どちらのスレッドも完了できず、デッドロックが発生します。[23]

多くの並列プログラムでは、サブタスクが同期して動作する必要があります。これには、バリアを使用する必要があります。バリアは通常、ロックまたはセマフォを使用して実装されます。[24]ロックフリーおよび待機フリーアルゴリズムとして知られるアルゴリズムの1つのクラスは、ロックとバリアの使用を完全に回避します。ただし、このアプローチは一般に実装が難しく、正しく設計されたデータ構造が必要です。[25]

すべての並列化が高速化につながるわけではありません。一般に、タスクがますます多くのスレッドに分割されるにつれて、それらのスレッドは、相互に通信したり、リソースへのアクセスを相互に待機したりする時間の増加する部分を費やします。[26] [27]リソースの競合または通信によるオーバーヘッドが他の計算に費やされる時間を支配すると、終了に必要な時間を短縮するのではなく、さらに並列化(つまり、ワークロードをさらに多くのスレッドに分割)が増加します。並列スローダウンとして知られるこの問題[28]は、ソフトウェア分析と再設計によって改善できる場合があります。[29]

きめの細かい、きめの粗い、恥ずかしい並列処理

多くの場合、アプリケーションは、サブタスクが相互に同期または通信する必要がある頻度に応じて分類されます。サブタスクが1秒間に何度も通信する必要がある場合、アプリケーションはきめ細かい並列処理を示します。1秒間に何度も通信しない場合は粗い並列処理を示し、通信する必要がほとんどないかまったくない場合は恥ずかしい並列処理を示します。驚異的並列アプリケーションは、並列化するのが最も簡単であると考えられています。

フリンの分類法

Michael J. Flynnは、並列(および順次)コンピューターおよびプログラム用の最も初期の分類システムの1つを作成しました。これは、現在、Flynnの分類法として知られています。Flynnは、プログラムとコンピューターを、単一のセットまたは複数のセットの命令を使用して動作しているかどうか、およびそれらの命令が単一のセットまたは複数のデータセットを使用しているかどうかによって分類しました。

単一命令単一データ(SISD)分類は、完全に順次プログラムと同等です。単一命令複数データ(SIMD)分類は、大規模なデータセットに対して同じ操作を繰り返し実行することに似ています。これは通常、信号処理アプリケーションで行われます。複数命令単一データ(MISD)は、めったに使用されない分類です。これに対処するためのコンピュータアーキテクチャ(シストリックアレイなど)が考案されましたが、このクラスに適合するアプリケーションはほとんど実現しませんでした。複数命令複数データ(MIMD)プログラムは、これまでで最も一般的なタイプの並列プログラムです。

David A.PattersonとJohnL。Hennessyによると、「もちろん、一部のマシンはこれらのカテゴリのハイブリッドですが、このクラシックモデルは、シンプルで理解しやすく、最初の近似が優れているため、存続しています。おそらく、その理解しやすさ、つまり最も広く使用されているスキームのためです。」[31]

並列処理の種類

ビットレベルの並列性

台湾のTaiwania3 、 COVID-19研究に加わった並列スーパーコンピューティングデバイス。

1970年代の超大規模集積(VLSI)コンピュータチップ製造技術の出現から1986年頃まで、コンピュータアーキテクチャの高速化は、コンピュータのワードサイズ(プロセッサがサイクルごとに操作できる情報の量)を2倍にすることによって推進されました。[32]ワードサイズを大きくすると、サイズがワードの長さよりも大きい変数に対して演算を実行するためにプロセッサが実行する必要のある命令の数が減ります。たとえば、8ビットプロセッサが2つの16ビット 整数を加算する必要がある場合、プロセッサは最初に標準の加算命令を使用して各整数から8つの下位ビットを加算し、次にadd-withを使用して8つの上位ビットを加算する必要があります。 -キャリーインストラクションと下位加算からのキャリービット。したがって、8ビットプロセッサは1つの操作を完了するために2つの命令を必要としますが、16ビットプロセッサは1つの命令で操作を完了することができます。

歴史的に、4ビットマイクロプロセッサは8ビット、次に16ビット、次に32ビットのマイクロプロセッサに置き換えられていました。この傾向は一般に、20年にわたって汎用コンピューティングの標準となっている32ビットプロセッサの導入で終わりました。x86-64アーキテクチャの出現により、2000年代初頭まで、64ビットプロセッサは一般的になりませんでした。

命令レベルの並列性

パイプラインのない正規のプロセッサ1つの命令を完了するには5クロックサイクルかかるため、プロセッサはサブスカラーパフォーマンスを発行できます(IPC = 0.2 <1)。

コンピュータプログラムは、本質的に、プロセッサによって実行される命令のストリームです。命令レベルの並列性がない場合、プロセッサはクロックサイクルごとに1つ未満の命令しか発行できませんIPC <1)。これらのプロセッサは、サブスカラープロセッサとして知られています。これらの命令は、プログラムの結果を変更せずに、並べ替えてグループにまとめ、並行して実行することができます。これは、命令レベルの並列性として知られています。命令レベルの並列性の進歩は、1980年代半ばから1990年代半ばまでのコンピュータアーキテクチャを支配していました。[33]

正規の5ステージパイプラインプロセッサ。最良のシナリオでは、1つの命令を完了するのに1クロックサイクルかかるため、プロセッサはスカラーパフォーマンスを発行できます(IPC = 1)。

最新のプロセッサはすべて、多段命令パイプラインを備えています。パイプラインの各ステージは、プロセッサがそのステージのその命令に対して実行するさまざまなアクションに対応しています。Nステージのパイプラインを備えたプロセッサは、完了のさまざまな段階で最大N個の異なる命令を持つことができるため、クロックサイクルごとに1つの命令を発行できます(IPC = 1)。これらのプロセッサは、スカラープロセッサとして知られています。パイプラインプロセッサの標準的な例は、命令フェッチ(IF)、命令デコード(ID)、実行(EX)、メモリアクセス(MEM)、およびレジスタライトバック(WB)の5つのステージを持つRISCプロセッサです。Pentium4プロセッサには35ステージのパイプラインがありました[34]

2つの実行ユニットを備えた標準的な5ステージのパイプラインプロセッサ。最良のシナリオでは、2つの命令を完了するのに1クロックサイクルかかるため、プロセッサはスーパースカラーパフォーマンスを発行できます(IPC = 2> 1)。

最近のほとんどのプロセッサには、複数の実行ユニットもあります。これらは通常、この機能をパイプライン化と組み合わせているため、クロックサイクルごとに複数の命令を発行できます(IPC> 1)。これらのプロセッサは、スーパースカラープロセッサとして知られています。スーパースカラープロセッサは、複数の実行ユニットがプロセッサ全体(つまり処理ユニット)ではないという点でマルチコアプロセッサとは異なります。命令は、それらの間にデータ依存関係がない場合にのみグループ化できます。スコアボードTomasuloアルゴリズム(スコアボードに似ていますが、レジスタの名前変更を利用します))は、アウトオブオーダー実行と命令レベルの並列性を実装するための最も一般的な手法の2つです。

タスクの並列処理

タスクの並列処理は、「同じデータセットまたは異なるデータセットのいずれかでまったく異なる計算を実行できる」という並列プログラムの特徴です。[35]これは、同じまたは異なるデータセットに対して同じ計算が実行されるデータ並列処理とは対照的です。タスクの並列処理には、タスクをサブタスクに分解してから、各サブタスクをプロセッサに割り当てて実行することが含まれます。次に、プロセッサはこれらのサブタスクを同時に、多くの場合は協調して実行します。タスクの並列処理は通常、問題のサイズに比例しません。[36]

スーパーワードレベルの並列処理

スーパーワードレベルの並列処理は、ループ展開と基本ブロックのベクトル化に基づくベクトル化手法です。ループベクトル化アルゴリズムとは異なり、座標、カラーチャネル、または手動で展開されたループの操作など、インラインコードの並列処理を利用できます。[37]

ハードウェア

記憶とコミュニケーション

並列コンピューターのメインメモリは、共有メモリ(単一のアドレス空間内のすべての処理要素間で共有)または分散メモリ(各処理要素が独自のローカルアドレス空間を持つ)のいずれかです。[38]分散メモリとは、メモリが論理的に分散されていることを指しますが、多くの場合、物理的にも分散されていることを意味します。分散共有メモリメモリ仮想化は、処理要素が独自のローカルメモリを持ち、非ローカルプロセッサ上のメモリにアクセスするという2つのアプローチを組み合わせたものです。ローカルメモリへのアクセスは、通常、非ローカルメモリへのアクセスよりも高速です。スーパーコンピューターについて、分散共有メモリ空間は、 PGASなどのプログラミングモデルを使用して実装できますこのモデルにより、ある計算ノードのプロセスが別の計算ノードのリモートメモリに透過的にアクセスできるようになります。すべての計算ノードは、 Infinibandなどの高速相互接続を介して外部共有メモリシステムにも接続されます。この外部共有メモリシステムはバーストバッファと呼ばれ、通常、複数のI /に物理的に分散された不揮発性メモリのアレイから構築されます。Oノード。

Non-Uniform Memory Access(NUMA)アーキテクチャの論理ビュー。一方のディレクトリ内のプロセッサは、もう一方のディレクトリのメモリ内のメモリにアクセスするよりも少ない遅延で、そのディレクトリのメモリにアクセスできます。

メインメモリの各要素に等しい遅延帯域幅でアクセスできるコンピュータアーキテクチャは、ユニフォームメモリアクセス(UMA)システムとして知られています。通常、これは、メモリが物理的に分散されていない共有メモリシステムによってのみ実現できます。このプロパティを持たないシステムは、Non-Uniform Memory Access(NUMA)アーキテクチャと呼ばれます。分散メモリシステムでは、メモリアクセスが不均一です。

コンピュータシステムは、キャッシュを利用します。これは、プロセッサの近くにある小さくて高速なメモリで、メモリ値の一時的なコピーを格納します(物理的および論理的な意味で近くにあります)。並列コンピュータシステムでは、同じ値を複数の場所に格納する可能性のあるキャッシュに問題があり、プログラムが正しく実行されない可能性があります。これらのコンピューターには、キャッシュされた値を追跡し、それらを戦略的にパージするキャッシュコヒーレンシシステムが必要です。これにより、プログラムが正しく実行されます。バススヌーピングは、アクセスされている値を追跡するための最も一般的な方法の1つです(したがって、パージする必要があります)。大規模で高性能なキャッシュコヒーレンスシステムの設計は、コンピュータアーキテクチャでは非常に難しい問題です。その結果、共有メモリコンピュータアーキテクチャは、分散メモリシステムほど拡張性がありません。[38]

プロセッサ-プロセッサおよびプロセッサ-メモリ通信は、共有(マルチポートまたはマルチプレックス)メモリ、クロスバースイッチ、共有バス、またはスターリングツリーなどの無数のトポロジの相互接続ネットワークを介するなど、いくつかの方法でハードウェアに実装できます。 、ハイパーキューブ、ファットハイパーキューブ(ノードに複数のプロセッサを備えたハイパーキューブ)、またはn次元メッシュ

相互接続されたネットワークに基づく並列コンピューターには、直接接続されていないノード間でメッセージを渡すことができるようにするための何らかのルーティングが必要です。プロセッサ間の通信に使用される媒体は、大規模なマルチプロセッサマシンでは階層的である可能性があります。

並列コンピューターのクラス

並列コンピューターは、ハードウェアが並列処理をサポートするレベルに応じて大まかに分類できます。この分類は、基本的なコンピューティングノード間の距離にほぼ類似しています。これらは相互に排他的ではありません。たとえば、対称型マルチプロセッサのクラスタは比較的一般的です。

マルチコアコンピューティング

マルチコアプロセッサは、同じチップ上に複数の処理ユニット(「コア」と呼ばれる)を含むプロセッサです。このプロセッサは、複数の実行ユニットを含み、1つの命令ストリーム(スレッド)からクロックサイクルごとに複数の命令を発行できるスーパースカラープロセッサとは異なります。対照的に、マルチコアプロセッサは、複数の命令ストリームからクロックサイクルごとに複数の命令を発行できます。Sony PlayStation3で使用するために設計されたIBMCellマイクロプロセッサ は、著名なマルチコアプロセッサです。マルチコアプロセッサの各コアは、スーパースカラーになる可能性もあります。つまり、すべてのクロックサイクルで、各コアは1つのスレッドから複数の命令を発行できます。

同時マルチスレッディング (Intelのハイパースレッディングが最もよく知られています)は、疑似マルチコアリズムの初期の形態でした。同時マルチスレッド化が可能なプロセッサは、同じ処理ユニット内に複数の実行ユニットを含みます。つまり、スーパースカラーアーキテクチャを備えており、複数のスレッドからクロックサイクルごとに複数の命令を発行できます。一方、縦断マルチスレッディングは、同じ処理ユニット内に単一の実行ユニットを含み、複数のスレッドから一度に1つの命令を発行できます。

対称型マルチプロセッシング

対称型マルチプロセッサ(SMP)は、メモリを共有し、バスを介して接続する複数の同一のプロセッサを備えたコンピュータシステムです。[39] バスの競合により、バスアーキテクチャのスケーリングが妨げられます。その結果、SMPは通常32を超えるプロセッサで構成されません。[40]プロセッサのサイズが小さく、大きなキャッシュによってバス帯域幅の要件が大幅に削減されるため、十分な量のメモリ帯域幅が存在する場合、このような対称型マルチプロセッサは非常に費用効果が高くなります。[39]

分散コンピューティング

分散コンピュータ(分散メモリマルチプロセッサとも呼ばれます)は、処理要素がネットワークで接続されている分散メモリコンピュータシステムです。分散コンピューターは非常にスケーラブルです。「並行コンピューティング」、「並列コンピューティング」、「分散コンピューティング」という用語は多くの重複があり、それらの間に明確な区別はありません。[41]同じシステムは、「並列」と「分散」の両方として特徴付けることができます。一般的な分散システムのプロセッサは、並行して同時に実行されます。[42]

クラスターコンピューティング

クラスターは、緊密に連携する疎結合コンピューターのグループであるため、いくつかの点で、それらは単一のコンピューターと見なすことができます。[43]クラスターは、ネットワークで接続された複数のスタンドアロンマシンで構成されています。クラスタ内のマシンは対称である必要はありませんが、対称でない場合、負荷分散はより困難になります。最も一般的なタイプのクラスターはBeowulfクラスターです。これは、 TCP / IPイーサネットローカルエリアネットワークに接続された複数の同一の市販のコンピューターに実装されたクラスターです[44] Beowulfテクノロジーは、もともとThomasSterlingとDonaldBeckerによって開発されまし すべてのTop500スーパーコンピューターの87%はクラスターです。[45]残りは、以下で説明する超並列プロセッサです。

グリッドコンピューティングシステム(以下で説明)は驚異的並列問題を簡単に処理できるため、最近のクラスターは通常、より困難な問題、つまりノードが相互に中間結果をより頻繁に共有する必要がある問題を処理するように設計されています。これには、高帯域幅と、さらに重要なことに、低遅延の相互接続ネットワークが必要です。多くの歴史的および現在のスーパーコンピューターは、Cray Geminiネットワークなど、クラスターコンピューティング用に特別に設計されたカスタマイズされた高性能ネットワークハードウェアを使用しています。[46] 2014年の時点で、現在のほとんどのスーパーコンピューターは、いくつかの既製の標準ネットワークハードウェア、多くの場合MyrinetInfiniBand、またはギガビットイーサネットを使用しています。

超並列計算
IBMBlueGene / L超並列スーパーコンピューターのキャビネット

超並列プロセッサ(MPP)は、多くのネットワークプロセッサを備えた単一のコンピュータです。MPPにはクラスターと同じ特性が多数ありますが、MPPには特殊な相互接続ネットワークがあります(クラスターはネットワークにコモディティハードウェアを使用します)。MPPはクラスターよりも大きくなる傾向があり、通常は100個をはるかに超えるプロセッサーを搭載しています。[47] MPPでは、「各CPUには、独自のメモリとオペレーティングシステムおよびアプリケーションのコピーが含まれています。各サブシステムは、高速相互接続を介して他のサブシステムと通信します。」[48]

2009年6月のTOP500ランキングで世界で5番目に速いスーパーコンピューターであるIBMのBlueGene / Lは、MPPです。

グリッドコンピューティング

グリッドコンピューティングは、並列コンピューティングの最も分散された形式です。これは、インターネットを介して通信するコンピューターを利用して、特定の問題に取り組みます。インターネットで利用できる低帯域幅と非常に高い遅延のため、分散コンピューティングは通常、驚異的並列の問題のみを処理します。多くの分散コンピューティングアプリケーションが作成されており、その中でSETI @homeFolding @ homeが最もよく知られている例です。[49]

ほとんどのグリッドコンピューティングアプリケーションは、ミドルウェア(オペレーティングシステムとアプリケーションの間に配置され、ネットワークリソースを管理し、ソフトウェアインターフェイスを標準化するソフトウェア)を使用します。最も一般的な分散コンピューティングミドルウェアは、Berkeley Open Infrastructure for Network Computing(BOINC)です。多くの場合、分散コンピューティングソフトウェアは「スペアサイクル」を利用して、コンピューターがアイドリングしているときに計算を実行します。

専用並列計算機

並列コンピューティングには、ニッチな関心分野であり続ける特殊な並列デバイスがあります。ドメイン固有ではありませんが、並列問題のいくつかのクラスにのみ適用できる傾向があります。

フィールドプログラマブルゲートアレイを使用した再構成可能コンピューティング

再構成可能コンピューティングとは、フィールドプログラマブルゲートアレイ(FPGA)を汎用コンピューターのコプロセッサーとして使用することです。FPGAは、本質的に、特定のタスクのためにそれ自体を再配線できるコンピュータチップです。

FPGAは、 VHDL [50]Verilogなどのハードウェア記述言語でプログラムできます[51]ただし、これらの言語でのプログラミングは面倒な場合があります。いくつかのベンダーは、ほとんどのプログラマーが精通しているCプログラミング言語の構文とセマンティクスをエミュレートしようとするCからHDL言語を作成しました。最もよく知られているCからHDL言語は、Mitrion-CImpulse CDIME-C、およびHandel-Cです。この目的のために、C ++に基づく SystemCの特定のサブセットを使用することもできます。

HyperTransportテクノロジーをサードパーティベンダーに公開するというAMDの決定は、高性能の再構成可能コンピューティングを可能にするテクノロジーになりました。[52] DRC ComputerCorporationの最高執行責任者であるMichaelR。D'Amourによると、「私たちが最初にAMDに足を踏み入れたとき、彼らは私たちを「ソケットスティーラー」と呼んでいました。今、彼らは私たちを彼らのパートナーと呼んでいます。」[52]

グラフィックスプロセッシングユニット(GPGPU)での汎用コンピューティング

グラフィックスプロセッシングユニット(GPGPU)での汎用コンピューティングは、コンピュータエンジニアリング研究におけるごく最近の傾向です。GPUは、コンピューターグラフィックス処理用に大幅に最適化されたコプロセッサーです。[53]コンピュータグラフィックス処理は、データ並列演算、特に線形代数 行列演算によって支配される分野です。

初期のGPGPUプログラムは、プログラムの実行に通常のグラフィックAPIを使用していました。ただし、 NvidiaAMDの両方を使用してGPUで汎用計算を実行するために、いくつかの新しいプログラミング言語とプラットフォームが構築され、それぞれCUDAStreamSDKを使用したプログラミング環境がリリースされています。他のGPUプログラミング言語には、BrookGPUPeakStream、およびRapidMindが含まれます。Nvidiaは、 Teslaシリーズの計算用の特定の製品もリリースしましたテクノロジーコンソーシアムのクロノスグループがOpenCLをリリースしました仕様。CPUとGPUで構成されるプラットフォーム間で実行されるプログラムを作成するためのフレームワークです。AMDAppleIntelNvidiaなどがOpenCLをサポートしています。

特定用途向け集積回路

並列アプリケーションを処理するために、いくつかの特定用途向け集積回路(ASIC)アプローチが考案されています。[54] [55] [56]

ASICは(定義上)特定のアプリケーションに固有であるため、そのアプリケーション用に完全に最適化できます。その結果、特定のアプリケーションでは、ASICは汎用コンピューターよりもパフォーマンスが優れている傾向があります。ただし、ASICはUVフォトリソグラフィーによって作成されます。このプロセスにはマスクセットが必要ですが、これは非常に高額になる可能性があります。マスクセットは100万米ドル以上かかることがあります。[57] (チップに必要なトランジスタが小さいほど、マスクは高価になります。)一方、(ムーアの法則で説明されているように)時間の経過に伴う汎用コンピューティングのパフォーマンスの向上は、これらのゲインを1つまたは2つのチップ世代。[52]初期コストが高く、ムーアの法則に基づく汎用コンピューティングに追い抜かれる傾向があるため、ほとんどの並列コンピューティングアプリケーションでASICを実行できなくなっています。ただし、いくつかは構築されています。一例として、分子動力学シミュレーション にカスタムASICを使用するPFLOPS RIKENMDGRAPE-3マシンがあります。

ベクトルプロセッサ
Cray-1ベクトルプロセッサです

ベクトルプロセッサは、大量のデータセットに対して同じ命令を実行できるCPUまたはコンピュータシステムです。ベクトルプロセッサには、数値またはベクトルの線形配列を処理する高レベルの演算があります。ベクトル演算の例は、A = B × Cです。ここで、AB、およびCは、それぞれ64ビット浮動小数点数の64要素ベクトルです。[58]それらはフリンのSIMD分類と密接に関連しています。[58]

クレイコンピュータは、1970年代と1980年代にベクトル処理コンピュータで有名になりました。ただし、CPUとしても完全なコンピュータシステムとしても、ベクトルプロセッサは一般的に姿を消しました。最新のプロセッサ命令セットには、 FreescaleSemiconductorAltiVecIntelStreamingSIMD Extensions(SSE) など、いくつかのベクトル処理命令が含まれています。

ソフトウェア

並列プログラミング言語

並行プログラミング言語ライブラリAPI、および並列プログラミングモデルアルゴリズムスケルトンなど)は、並列コンピューターをプログラミングするために作成されました。これらは通常、基盤となるメモリアーキテクチャ(共有メモリ、分散メモリ、または共有分散メモリ)についての仮定に基づいてクラスに分類できます。共有メモリプログラミング言語は、共有メモリ変数を操作することによって通信します。分散メモリはメッセージパッシングを使用します。POSIXスレッドOpenMPは、最も広く使用されている共有メモリAPIの2つですが、メッセージパッシングインターフェイスは(MPI)は、最も広く使用されているメッセージパッシングシステムAPIです。[59]並列プログラムのプログラミングで使用される1つの概念は、将来の概念です。この概念では、プログラムの一部が、将来、必要なデータをプログラムの別の部分に配信することを約束します。

CAPS entreprisePathscaleは、ハイブリッドマルチコア並列プログラミング(HMPP)ディレクティブをOpenHMPPと呼ばれるオープンスタンダードにするための取り組みも調整しています。OpenHMPPディレクティブベースのプログラミングモデルは、ハードウェアアクセラレータでの計算を効率的にオフロードし、ハードウェアメモリとの間のデータ移動を最適化するための構文を提供します。OpenHMPPディレクティブは、アクセラレータデバイス(GPUなど)またはより一般的にはコアのセットでのリモートプロシージャコール(RPC)を記述します。ディレクティブはCまたはFortranに注釈を付けます2セットの機能を説明するコード:リモートデバイスへのプロシージャ(コードレットと表示)のオフロードと、CPUメインメモリとアクセラレータメモリ間のデータ転送の最適化。

コンシューマーGPUの台頭により、グラフィックスAPI(計算シェーダーと呼ばれる)、専用API(OpenCLなど)、またはその他の言語拡張機能の いずれかで、計算カーネルがサポートされるようになりました。

自動並列化

コンパイラによるシーケンシャルプログラムの自動並列化は、特に前述のプロセッサ周波数の制限がある場合、並列計算の「聖杯」です。コンパイラの研究者による数十年の作業にもかかわらず、自動並列化は限られた成功しか収めていません。[60]

主流の並列プログラミング言語は、明示的に並列であるか、(せいぜい)部分的に暗黙的であり、プログラマーがコンパイラーに並列化のディレクティブを与えます。いくつかの完全に暗黙的な並列プログラミング言語が存在します— SISAL、Parallel HaskellSequenceLSystem CFPGA用)、Mitrion-CVHDL、およびVerilog

アプリケーションチェックポインティング

コンピュータシステムの複雑さが増すにつれて、通常、平均故障間隔は短くなります。アプリケーションチェックポインティングは、コンピュータシステムがアプリケーションの「スナップショット」(コアダンプに似た、現在のすべてのリソース割り当てと変数の状態の記録)を取得する手法です。この情報は、コンピューターに障害が発生した場合にプログラムを復元するために使用できます。アプリケーションチェックポイントとは、プログラムが最初からではなく、最後のチェックポイントからのみ再起動する必要があることを意味します。チェックポインティングはさまざまな状況でメリットをもたらしますが、ハイパフォーマンスコンピューティングで使用される多数のプロセッサを備えた高度に並列化されたシステムで特に役立ちます[61]

アルゴリズム手法

並列コンピューターがより大きく、より高速になるにつれて、以前は実行に時間がかかりすぎていた問題を解決できるようになりました。バイオインフォマティクスタンパク質フォールディングおよび配列分析用)や経済学(数理ファイナンス用)などのさまざまな分野で、並列コンピューティングが利用されています。並列コンピューティングアプリケーションの一般的なタイプの問題は次のとおりです。[62]

フォールトトレランス

並列コンピューティングは、特に同じ操作を並列に実行するロックステップシステムを介して、フォールトトレラントコンピュータシステムの設計に適用することもできます。これにより、1つのコンポーネントに障害が発生した場合の冗長性が提供され、結果が異なる場合の自動エラー検出エラー訂正も可能になります。これらのメソッドは、一時的なエラーによって引き起こされるシングルイベントの混乱を防ぐために使用できます。[63]組み込みシステムまたは特殊システムでは追加の対策が必要になる場合がありますが、この方法は、市販の既製システムでnモジュラー冗長性を実現するための費用効果の高いアプローチを提供できます。

歴史

ILLIAC IV、「最も悪名高いスーパーコンピューター」[64]

真の(MIMD)並列処理の起源は、 Luigi FedericoMenabreaとCharlesBabbageによって発明された分析エンジンスケッチにまでさかのぼります。[65] [66] [67]

1958年4月、Stanley Gill(Ferranti)は、並列プログラミングと分岐および待機の必要性について議論しました。[68]また、1958年に、IBMの研究者であるジョン・コックダニエル・スロトニックは、数値計算における並列処理の使用について初めて議論しました。[69] バロースコーポレーションは1962年にD825を発表しました。これは、クロスバースイッチを介して最大16個のメモリモジュールにアクセスする4プロセッサコンピュータです[70] 1967年、アムダールとスロットニックは、米国情報処理学会会議で並列処理の実現可能性についての討論を発表しました。[69]アムダールの法則がこの議論の間にあった並列処理による高速化の限界を定義するために造られました。

1969年、Honeywellは最初のMulticsシステムを発表しました。これは、最大8つのプロセッサを並行して実行できる対称型マルチプロセッサシステムです。[69] 1970年代にカーネギーメロン大学で行われたマルチプロセッサプロジェクトであるC.mmpは、数個を超えるプロセッサを備えた最初のマルチプロセッサの1つでした。スヌーピングキャッシュを備えた最初のバス接続マルチプロセッサは、1984年のSynapse N +1でした。 [66]

SIMD並列コンピューターは1970年代にさかのぼることができます。初期のSIMDコンピュータの背後にある動機は、複数の命令に対するプロセッサの制御ユニットのゲート遅延を償却することでした。[71] 1964年、スロットニックはローレンスリバモア国立研究所のために超並列コンピューターを構築することを提案しました[69]彼の設計は、最も初期のSIMD並列計算の取り組みである米国空軍ILLIACIVによって資金提供されました[69]その設計の鍵は、最大256個のプロセッサを備えたかなり高い並列処理でした。これにより、マシンは、後にベクトル処理と呼ばれる大規模なデータセットで作業できるようになりました。しかし、ILLIAC IVは、プロジェクトが4分の1しか完了しなかったため、「最も悪名高いスーパーコンピューター」と呼ばれましたが、11年かかり、当初の見積もりの​​ほぼ4倍の費用がかかりました。[64] 1976年にようやく最初の実際のアプリケーションを実行する準備ができたとき、Cray-1などの既存の商用スーパーコンピューターよりも優れていました。

超並列コンピュータとしての生物学的脳

1970年代初頭、MITコンピューター科学人工知能研究所で、マービンミンスキーシーモアパパートは、生物学的脳を大規模な並列コンピューターと見なすの社会理論の開発を開始しました1986年に、ミンスキーは心の社会を出版しました。それは「心は多くの小さなエージェントから形成され、それぞれがそれ自体で無意識である」と主張しています。[72]理論は、私たちがインテリジェンスと呼ぶものが、非インテリジェンス部分の相互作用の産物である可能性があることを説明しようとしています。ミンスキー氏によると、この理論に関する最大のアイデアは、ロボットアーム、ビデオカメラ、コンピューターを使用して子供用ブロックで構築するマシンを作成しようとした彼の仕事から生まれたとのことです。[73]

同様のモデル(生物学的脳を超並列コンピューターと見なします。つまり、脳は独立したエージェントまたは半独立したエージェントのコンステレーションで構成されています)も次のように説明されています。

も参照してください

参考文献

  1. ^ ゴットリーブ、アラン; アルマシ、ジョージS.(1989)。高度な並列コンピューティングカリフォルニア州レッドウッドシティー:ベンジャミン/カミングス。ISBN 978-0-8053-0177-9
  2. ^ SV Adve etal。(2008年11月)。「イリノイでの並列コンピューティング研究:UPCRCアジェンダ」 2018-01-11ウェイバックマシンでアーカイブ(PDF)。Parallel @ Illinois、イリノイ大学アーバナシャンペーン校。「これらのパフォーマンス上の利点の主な手法(クロック周波数の増加と、よりスマートであるがますます複雑になるアーキテクチャ)は、いわゆるパワーウォールにぶつかっています。コンピュータ業界は、将来のパフォーマンスの向上は、主にプロセッサ(またはコア)の数の増加によるものでなければならないことを認めています)単一のコアを高速化するのではなく、ダイ上で。」
  3. ^ Asanovic etal。古い[従来の知識]:電力は無料ですが、トランジスタは高価です。新しい[従来の知識]は、電力は高価ですが、トランジスタは「無料」です。
  4. ^ Asanovic、Krste etal。(2006年12月18日)。「並列コンピューティング研究の展望:バークレーからの眺め」(PDF)。カリフォルニア大学バークレー校。テクニカルレポート番号UCB / EECS-2006-183。「古い[従来の知識]:クロック周波数を上げることがプロセッサのパフォーマンスを向上させる主な方法です。新しい[従来の知識]:並列処理を増やすことがプロセッサのパフォーマンスを向上させる主な方法です…一般的にクロックの向上に関連する企業であるIntelの代表者でさえ-速度はより良い立場であり、クロック速度を最大化することでパフォーマンスを最大化する従来のアプローチは限界に達していると警告しました。」
  5. ^ 「並行性は並列性ではない」、 Waza会議、2012年1月11日、 Rob Pike Wayback Machine2015年7月30日にアーカイブされたスライド )(ビデオ
  6. ^ 「並列処理と並行処理」HaskellWiki
  7. ^ ヘネシー、ジョンL .; パターソン、デイビッドA。; Larus、James R.(1999)。コンピューターの構成と設計:ハードウェア/ソフトウェアインターフェイス(第2版、第3版)。サンフランシスコ:カウフマン。ISBN 978-1-55860-428-5
  8. ^ a b バーニー、ブレイズ。「並列計算入門」ローレンスリバモア国立研究所2007年11月9日取得
  9. ^ トーマス・ローバー; GudulaRünger(2013)。並列プログラミング:マルチコアおよびクラスターシステム用シュプリンガーサイエンス&ビジネスメディア。p。1.ISBN _ 9783642378010
  10. ^ ヘネシー、ジョンL。; パターソン、デビッドA.(2002)。コンピュータアーキテクチャ/定量的アプローチ(第3版)。カリフォルニア州サンフランシスコ:インターナショナルトムソン。p。43. ISBN 978-1-55860-724-8
  11. ^ Rabaey、Jan M.(1996)。デジタル集積回路:設計の観点ニュージャージー州アッパーサドルリバー:プレンティスホール。p。235. ISBN 978-0-13-178609-7
  12. ^ フリン、ローリーJ.(2004年5月8日)。「Intelは2つの新しいマイクロプロセッサの開発を停止します」ニューヨークタイムズ2012年6月5日取得
  13. ^ トーマス・ローバー; GudulaRünger(2013)。並列プログラミング:マルチコアおよびクラスターシステム用シュプリンガーサイエンス&ビジネスメディア。p。2. ISBN 9783642378010
  14. ^ トーマス・ローバー; GudulaRünger(2013)。並列プログラミング:マルチコアおよびクラスターシステム用シュプリンガーサイエンス&ビジネスメディア。p。3. ISBN 9783642378010
  15. ^ Amdahl、Gene M.(1967)。「大規模なコンピューティング機能を実現するためのシングルプロセッサアプローチの妥当性」Proceeding AFIPS '67(Spring)1967年4月18〜20日の議事録、Spring Joint Computer Conference:483〜485。土井10.1145 /1465482.1465560
  16. ^ ブルックス、フレデリックP.(1996)。ソフトウェア工学に関する神話上の男月間エッセイ(結婚記念日編、訂正付き、5。[博士]編)。マサチューセッツ州レディング[ua]:Addison-Wesley。ISBN 978-0-201-83595-3
  17. ^ ミシェル・マクール; ジェームス・レインダーズ; アーチロビソン(2013)。構造化並列プログラミング:効率的な計算のためのパターンエルゼビア。p。61。
  18. ^ グスタフソン、ジョンL.(1988年5月)。「アムダールの法則の再評価」ACMの通信31(5):532–533。CiteSeerX10.1.1.509.6892_ 土井10.1145 /42411.42415S2CID33937392_ 2007年9月27日にオリジナルからアーカイブされました  
  19. ^ Bernstein、AJ(1966年10月1日)。「並列処理のためのプログラムの分析」。電子コンピュータでのIEEEトランザクションEC-15(5):757–763。土井10.1109 /PGEC.1966.264565
  20. ^ Roosta、Seyed H.(2000)。並列処理と並列アルゴリズム:理論と計算ニューヨーク州ニューヨーク[ua]:スプリンガー。p。114. ISBN 978-0-387-98716-3
  21. ^ 「プロセスとスレッド」Microsoft DeveloperNetworkMicrosoft Corp.2018 2018年5月10日取得
  22. ^ クラウス、カークJ(2018)。「パフォーマンスのためのスレッドセーフ」パフォーマンスのために開発します。2018年5月10日取得
  23. ^ タネンバウム、アンドリューS.(2002-02-01)。オペレーティングシステムのデッドロックの概要通知します。Pearson Education、Informit 2018年5月10日取得
  24. ^ セシル、デビッド(2015-11-03)。「同期内部–セマフォ」埋め込みAspenCore 2018年5月10日取得
  25. ^ Preshing、Jeff(2012-06-08)。「ロックフリープログラミング入門」プログラミングのプレッシング2018年5月10日取得
  26. ^ 「「驚異的並列」の反対は何ですか?」StackOverflow 2018年5月10日取得
  27. ^ Schwartz、David(2011-08-15)。「スレッドの競合とは何ですか?」StackOverflow 2018年5月10日取得
  28. ^ Kukanov、Alexey(2008-03-04)。「なぜ単純なテストで並行して速度が低下するのか」2015年2月15日取得
  29. ^ クラウス、カークJ(2018)。「パフォーマンスのためのスレッド化」パフォーマンスのために開発します。2018年5月10日取得
  30. ^ フリン、マイケルJ.(1972年9月)。「いくつかのコンピュータ組織とその有効性」(PDF)コンピューターでのIEEEトランザクションC-21(9):948–960。土井10.1109 /TC.1972.5009071
  31. ^ パターソンとヘネシー、p。748。
  32. ^ シン、デビッド・カラー; JP(1997)。並列コンピュータアーキテクチャ([Nachdr。] ed。)。サンフランシスコ:Morgan KaufmannPubl。p。15. ISBN 978-1-55860-343-1
  33. ^ Culler etal。p。15。
  34. ^ パット、エール(2004年4月)。 10年後のマイクロプロセッサ:課題は何ですか、どのようにそれらに対応しますか? ウェイバックマシン(wmv)で2008年4月14日にアーカイブされました。カーネギーメロン大学で著名な講師の講演。2007年11月7日に取得。
  35. ^ Culler etal。p。124。
  36. ^ Culler etal。p。125。
  37. ^ サミュエルラーセン; サマン・アマラシンゲ。「マルチメディア命令セットによるスーパーワードレベルの並列処理の活用」(PDF)
  38. ^ a b パターソンとヘネシー、p。713。
  39. ^ a b ヘネシーとパターソン、p。549。
  40. ^ パターソンとヘネシー、p。714。
  41. ^ Ghosh(2007)、p。10. Keidar(2008)
  42. ^ リンチ(1996)、p。xix、1–2。ペレグ(2000)、p。1.1。
  43. ^ クラスタリングとは何ですか?Webopediaコンピュータ辞書。2007年11月7日に取得。
  44. ^ ベオウルフの定義。 PCマガジン2007年11月7日に取得。
  45. ^ 「リスト統計| TOP500スーパーコンピューターサイト」www.top500.org 2018年8月5日取得
  46. ^ ウェイバックマシン2015年1月28日にアーカイブされた「相互接続」
  47. ^ ヘネシーとパターソン、p。537。
  48. ^ MPP定義。 PCマガジン2007年11月7日に取得。
  49. ^ Kirkpatrick、Scott(2003)。「コンピュータサイエンス:これからの大まかな時代」。科学299(5607):668–669。土井10.1126 /science.1081623PMID12560537_ S2CID60622095_  
  50. ^ Valueva、Maria; ワルーエフ、ゲオルギイ; Semyonova、Nataliya; Lyakhov、Pavel; Chervyakov、ニコライ; Kaplun、ドミトリー; ボガエフスキー、ダニール(2019-06-20)。「ハードウェア効率の良い対角関数を使用した残差記数法の構築」エレクトロニクス8(6):694。doi10.3390 / electronics8060694ISSN2079-9292_ すべてのシミュレートされた回路は、超高速集積回路(VHSIC)ハードウェア記述言語(VHDL)で記述されました。ハードウェアモデリングは、ザイリンクスFPGA Artix 7xc7a200tfbg484-2で実行されました。 
  51. ^ グプタ、アンキット; スネジャ、クリティ(2020年5月)。「VerilogのFPGAに基づく近似行列乗算器のハードウェア設計」2020年第4回インテリジェントコンピューティングおよび制御システムに関する国際会議(ICICCS)インド、マドゥライ:IEEE:496–498。土井10.1109 /ICICCS48265.2020.9121004ISBN 978-1-7281-4876-2S2CID219990653 _
  52. ^ a b c D'Amour、Michael R.、DRC ComputerCorporationの最高執行責任者。「標準の再構成可能コンピューティング」。2007年2月28日、デラウェア大学の招待講演者。
  53. ^ Boggan、Sha'Kia、Daniel M. Pressel(2007年8月)。GPU:ウェイバックマシンで2016年12月25日にアーカイブされた汎用計算用の新しいプラットフォーム (PDF)。ARL-SR-154、米陸軍研究所。2007年11月7日に取得。
  54. ^ Maslennikov、オレグ(2002)。「パラレルASICまたはFPGAベースのシステムでのプロセッサエレメントの実行プログラムの体系的な生成とVHDLへの変換-プロセッサエレメントコントロールユニットの説明」。 コンピュータサイエンスの講義ノート 2328/2002: p。272。
  55. ^ 下川恭子; 不破、Y。; 荒巻直樹(1991年11月18〜21日)。「多数のニューロンと毎秒10億の接続速度のための並列ASICVLSIニューロコンピューター」。ニューラルネットワークに関する国際合同会議3:2162〜2167。土井10.1109 /IJCNN.1991.170708ISBN 978-0-7803-0227-3S2CID61094111 _
  56. ^ Acken、Kevin P。; アーウィン、メアリージェーン; オーエンス、ロバートM.(1998年7月)。「効率的なフラクタル画像コーディングのための並列ASICアーキテクチャ」。VLSI信号処理のジャーナル19(2):97–113。土井10.1023 / A:1008005616596S2CID2976028_ 
  57. ^ Kahng、Andrew B.(2004年6月21日)「ウェイバックマシン2008年1月31日にアーカイブされた半導体産業におけるDFMの問題の範囲 カリフォルニア大学サンディエゴ校。「FutureDesignfor Manufacturing(DFM)テクノロジーは、設計[回復不能な支出]のコストを削減し、製造[回復不可能な支出](マスクセットとプローブカードのコスト)に直接対処する必要があります。これは、90nmで100万ドルをはるかに超えています。テクノロジーノードであり、半導体ベースのイノベーションに大きなダンパーをもたらします。」
  58. ^ a b パターソンとヘネシー、p。751。
  59. ^ ウェイバックマシンで2011年7月25日にアーカイブされたMPIの発明者BillGroppに与えられたシドニーフェルンバック賞、MPIを「主要なHPC通信インターフェース」と呼んでいます。
  60. ^ シェン、ジョンポール; ミッコ・H・リパスティ(2004)最新のプロセッサ設計:スーパースカラープロセッサの基礎(第1版)。アイオワ州ドゥビューク:マグロウヒル。p。561. ISBN 978-0-07-057064-1しかし、そのような研究の聖杯、つまりシリアルプログラムの自動並列化はまだ実現されていません。特定のクラスのアルゴリズムの自動並列化が実証されていますが、そのような成功は主に、予測可能なフロー制御(たとえば、静的に決定された反復回数を持つネストされたループ構造)と静的に分析可能なメモリアクセスパターンを備えた科学および数値アプリケーションに限定されています。(たとえば、浮動小数点データの大規模な多次元配列をウォークオーバーします)。
  61. ^ 並列コンピューティング百科事典、第4巻 David Padua 2011 ISBN0387097651ページ265 
  62. ^ Asanovic、Krste、他。(2006年12月18日)。「並列コンピューティング研究の展望:バークレーからの眺め」(PDF)。カリフォルニア大学バークレー校。テクニカルレポート番号UCB / EECS-2006-183。17〜19ページの表を参照してください。
  63. ^ Dobel、B.、Hartig、H。、およびEngel、M。(2012)「冗長マルチスレッドのオペレーティングシステムサポート」。組み込みソフトウェアに関する第10回ACM国際会議の議事録、83–92。土井 10.1145 / 2380356.2380375
  64. ^ a b Patterson and Hennessy、pp。749–50:「後のプロジェクトで役立ついくつかのテクノロジーをプッシュすることに成功したものの、ILLIAC IVはコンピューターとして失敗しました。コストは、1966年に見積もられた800万ドルから1972年までに3100万ドルに上昇しました。計画されたマシンのわずか4分の1の建設。これはおそらく最も悪名高いスーパーコンピューターでした。プロジェクトは1965年に開始され、1976年に最初の実際のアプリケーションを実行しました。」
  65. ^ メナブレア、LF(1842)。チャールズ・バベッジによって発明された分析エンジンのスケッチBibliothèqueUniverselledeGenève。2007年11月7日に取得。引用:「数値表の作成に必要な計算など、一連の同一の計算を実行する場合は、マシンを使用して、同時に複数の結果を得ることができます。 、これにより、プロセス全体が大幅に短縮されます。」
  66. ^ a b パターソンとヘネシー、p。753。
  67. ^ RW Hockney、CRJesshope。並列コンピュータ2:アーキテクチャ、プログラミングとアルゴリズム、第2巻1988.p。8引用:「コンピューター設計における並列処理への最初の言及は、チャールズ・バベッジによって発明された分析エンジンのスケッチと題された…1842年の一般的なLFメナブレアの出版物にあると考えられています」。
  68. ^ 「並列プログラミング」、S。Gill、 The Computer JournalVol1#1、pp2-10、British Computer Society、1958年4月。
  69. ^ a b c d e Wilson、Gregory V.(1994)。「並列コンピューティングの開発の歴史」バージニア工科大学/ノーフォーク州立大学、コンピュータサイエンスのデジタルライブラリを使用したインタラクティブラーニング2008年1月8日取得
  70. ^ Anthes、Gry(2001年11月19日)。「並列処理の力」Computerworld2008年1月31日にオリジナルからアーカイブされました2008年1月8日取得
  71. ^ パターソンとヘネシー、p。749。
  72. ^ ミンスキー、マービン(1986)。心の社会ニューヨーク:サイモン&シュスター。pp。17  _ ISBN 978-0-671-60740-1
  73. ^ ミンスキー、マービン(1986)。心の社会ニューヨーク:サイモン&シュスター。pp。29  _ ISBN 978-0-671-60740-1
  74. ^ Blakeslee、Thomas(1996)。意識を超えて。自己の秘密を解き明かすpp。6–7  _
  75. ^ ガザニガ、マイケル; ルドゥー、ジョセフ(1978)。統合された心pp。132–161。
  76. ^ ガザニガ、マイケル(1985)。社会的脳。心のネットワークを発見するpp。77–79。  _
  77. ^ Ornstein、Robert(1992)。意識の進化:私たちの考え方の起源pp。2  _
  78. ^ ヒルガード、アーネスト(1977)。分割された意識:人間の思考と行動における複数のコントロールニューヨーク:ワイリー。ISBN 978-0-471-39602-4
  79. ^ ヒルガード、アーネスト(1986)。分割された意識:人間の思考と行動における複数のコントロール(拡張版)ニューヨーク:ワイリー。ISBN 978-0-471-80572-4
  80. ^ カク、ミチオ(2014)。心の未来
  81. ^ Ouspenskii、Pyotr(1992)。"第3章"。奇跡を求めて。未知の教えの断片pp。72–83。
  82. ^ 「公式ニューロクラスター脳モデルサイト」2017年7月22日取得

さらに読む

  • ロドリゲス、C。; ヴィラグラ、M。; Baran、B。(2008年8月29日)。「ブール充足可能性のための非同期チームアルゴリズム」。ネットワーク、情報、コンピューティングシステムのバイオインスパイアードモデル、2007年。Bionetics2007。2位:66–69。土井10.1109 /BIMNICS.2007.4610083S2CID15185219 _
  • セーチン、A。; 写真測量における並列計算。GIMインターナショナル。#1、2016年、21〜23ページ。

外部リンク

この記事を聞く54
音声ウィキペディアアイコン
このオーディオファイルは、2013年8月21日付けのこの記事の改訂版から作成されたものであり、その後の編集は反映されていません。 (2013-08-21)