この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "並列計算"
並列計算(へいれつけいさん、英語: parallel computing)は、コンピュータにおいて特定の処理をいくつかの独立した小さな処理に細分化し、複数の処理装置(プロセッサ)上でそれぞれの処理を同時に実行させることである[1]。並列コンピューティングや並列処理ともいう。 大きな問題を解いたり、大量のデータを処理したりする過程は、より小さなサブタスクやサブデータグループの処理に分割できることが多い、という事実を利用して単位時間あたりの処理効率(スループット)の向上を図る手法である。 並列処理(並列計算)はスーパーコンピュータでは以前から採られている手法である。スーパーコンピュータの高い性能は、プロセッサ数やノード数がパーソナルコンピュータに比べて極めて多く、並列処理性能が高いことで実現している。 並列計算のために設計されたコンピュータは並列コンピュータという。並列コンピュータは当初スーパーコンピュータなどの高価で大規模なシステムのみに見られる設計だったが、パーソナルコンピュータや携帯機器でもCPUをマルチコア化し並列処理をさせることが当たり前になってきた。CPUのクロック周波数を上げることで処理性能向上させることには限界や問題が見えてきたからこの手法が採用されるようになった。 また並列処理に特化したコプロセッサであるGPUも、個人が(比較的気軽に)購入できる価格帯で販売されるようになってきており、PCに後付で搭載する形での使用も広まっている。GPUは当初は主に、コンピュータゲームの3DCGレンダリングなどの画像処理に使われていたので「GPU」と呼ばれることになったが、実際には並列処理全般に使うことができるものであり、こうした使用法をGPGPUといい、今ではディープラーニングや暗号通貨のマイニングなど、現実的な時間内に処理しようとすると並列処理が必要となるさまざまな用途で使われるようになっている。 並列処理の歴史を遡ると、1958年にIBMの研究者ジョン・コックと Daniel Slotnick は数値計算における並列性の利用について初めて話し合っている[2]。1962年には、バロース社が4プロセッサのコンピュータ D825 を発表した。→#歴史 関連する概念に並行計算(へいこうけいさん)があるが、並行計算は一つのタスクの計算を並列化することにとどまらず、複数の相互作用しうるタスクを、プロセスやスレッドなどをもちいて単一または複数の計算資源にスケジューリングするといった、より汎用性の高い処理をさす。並列計算は物理的に計算資源が複数なければ効果が得られないが、並行計算はたとえ計算資源が1つだけだったとしても、マルチタスクに対応したオペレーティングシステムがプロセッサ時間をスライスして各タスクの処理に割り当てることで効果が得られる。 特に、並列計算専用に設計されたコンピュータを用いずに、複数のパーソナルコンピュータやサーバ、スーパーコンピュータを接続することで並列計算を実現するものをコンピュータ・クラスターと呼ぶ。このクラスターをインターネットなどの広域ネットワーク上に分散させるものも、広義には並列計算に属すが、分散コンピューティングあるいはグリッド・コンピューティングと呼び、並列計算とは区別することが多い。 従来、コンピュータソフトウェアは逐次的に計算されるものとして書かれてきた。問題を解くためにアルゴリズムが構築され、それによって逐次的に実行される命令列が生成される。その命令列は、コンピュータのCPU上で実行される。命令は一度に1つずつ実行される[3]。 一方並列計算では、複数の計算ノードが同時並列的に動作して問題を解く。問題は独立した部分に分割され、各計算ノードがアルゴリズムの一部を同時並列的に実行する。計算ノードの実体は様々であり、マルチプロセッサ型のコンピュータの各CPUだったり、ネットワーク上のコンピュータだったり、専用ハードウェアだったり、それらの組合せだったりする[3]。 1980年代から2004年まで、コンピュータの性能向上の主たる要因はクロック周波数の向上にあった。プログラムの実行時間は、命令数と1命令あたりの平均実行時間をかけたものに比例する。他の要因が全く変化しないと仮定すると、クロック周波数の向上によって1命令あたりの平均実行時間が減少する[4]。 一方で、マイクロプロセッサの消費電力は P = C × V 2 × F {\displaystyle P=C\times V^{2}\times F} という式で与えられる。ここで、P は消費電力、C はクロックサイクル毎に切り替えられる静電容量(入力が変化するトランジスタの総数に比例)、V は電圧、F はプロセッサの周波数(正確には1秒あたりのサイクル数)である[5]。従って、クロック周波数が高くなると、プロセッサの消費電力も増大する。プロセッサの消費電力の増大は、インテルが2004年5月に開発中だったプロセッサをキャンセルした最大の理由であり、この時点がクロック周波数向上が性能向上の主たる要因となっていた時代の終焉であった[6] 。 ムーアの法則は、マイクロプロセッサでのトランジスタの実装密度が18ヶ月から24ヶ月毎に倍になるという経験則である。消費電力の問題は以前から指摘されていたが、ムーアの法則は未だに有効である。クロック周波数向上の時代が終わると共に、増大したトランジスタ数は周波数向上以外に利用されることになり、並列計算をマイクロプロセッサ上で実装する時代が到来した。 並列計算のプラットフォームにおけるアルゴリズムの性能は、そのアルゴリズムをどれだけ並列化できるかに依存する。そのため、1960年代にジーン・アムダールが定式化したアムダールの法則が重要となってくる[7]。それによると、プログラムの中の並列化できない部分が並列化による性能向上を制限する。大規模な工学的問題や数学問題には、一般に並列化可能な部分と並列化不可能な部分(逐次実行部分)がある。アムダールの法則によれば、以下のような関係が成り立つ。 S = 1 ( 1 − P ) {\displaystyle S={\frac {1}{(1-P)}}} ここで、Sはプログラムの性能向上率(逐次実行版での実行時間を1としたときの倍率)、Pは並列化可能な部分の比率である。逐次実行部分がプログラムの実行時間の10%を占めている場合、性能向上は10倍となり、それ以上の多くの計算ノードを追加しても意味はない。これにより、並列実行ユニットを追加して意味のある個数の上限が得られる。アムダールの法則の概念を図示したもの。タスクが独立した二つの部分AとBから構成されている。Bは計算時間の約30%を占めている。がんばってBを改良して5倍の性能にしても、全体としての性能向上は少しでしかない。逆にAを2倍の性能に改良した方が全体性能はより向上する。 グスタフソンの法則は、アムダールの法則とも密接に関連する計算機工学における法則である。グスタフソンの法則は以下の式で表される。 S ( P ) = P − α ( P − 1 ) {\displaystyle \displaystyle S(P)=P-\alpha (P-1)} ここで、Pはプロセッサ数、Sは性能向上、 α {\displaystyle \alpha } は処理の並列化できない部分である[8]。アムダールの法則では問題のサイズが固定であり、逐次実行部分はプロセッサ数に依存しないと仮定されている。
概要
背景
アムダールの法則とグスタフソンの法則
Size:105 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef