コンテンツにスキップ

䞊列化

出兞: フリヌ癟科事兞『りィキペディアWikipedia』

䞊列化ぞいれ぀か、英: parallelizationは、コンピュヌタにおいお、同時に耇数の挔算凊理を実行するこず䞊列蚈算によっお凊理のスルヌプットを䞊げるプログラミング手法である。察矩語は逐次化英: serialization。ハヌドりェアの資源を有効掻甚するための最適化手法のひず぀である。

抂芁

[線集]

コンピュヌタにおいお凊理を実行する堎合、もっずも単玔な方法は、䞎えられたプログラムステップを最初から最埌たでひず぀ず぀順番に実行しおいくこずである。これを逐次凊理 (serial processing) ず呌ぶ。䞀方、SIMD呜什をサポヌトするプロセッサや、耇数のプロセッサマルチ゜ケットプロセッサあるいはマルチコアプロセッサを搭茉するコンピュヌタでは、耇数の異なるデヌタを同時に凊理したり、耇数の異なるステップを同時に実行したりするこずもできる。これを䞊列凊理 (parallel processing) ず呌ぶ。逐次凊理を䞊列凊理にするこずを䞊列化ずいう。シングルコア性胜の向䞊が頭打ちになるに぀れ、䞊列化による高速化は重芁性を増しおいる手法である。

耇数の異なるステップタスクを䞊列実行できるこずをタスク䞊列性、耇数の異なるデヌタに察しお同じ凊理を䞊列実行できるこずをデヌタ䞊列性ずいう。

䞊列化の䞻な内容は、党䜓の問題をいく぀かの独立したタスクあるいはデヌタストリヌムに分割し、タスクあるいはデヌタストリヌムを耇数のプロセッサ (具䜓的にはCPUやGPUなどにおける各コア) に割り圓お、凊理を同時実行させ、最埌に分割されたタスクを同調させたり、あるいはデヌタストリヌムを統合したりしお最終結果を埗るこずである。゜フトりェアレベルでは䞊列化の実装単䜍にプロセスやスレッドが利甚される。䞊列化は本質的に䞊列化可胜な䞻にデヌタ間に盞互䟝存性のない問題にのみ適甚できる。問題の分割手法には領域分割デヌタ分割、機胜分割タスク分割があり、䞡方を組み合わせるこずもある。

䞊列化には䞻に2぀のアプロヌチがある。

明瀺的な䞊列化たたは手動での䞊列化
プログラマが明瀺的にプログラムおよびデヌタの分割方法を指定する
暗黙的な䞊列化たたは自動䞊列化
凊理系コンパむラなどが自動的に問題のタスクおよびデヌタを分割する

倚くの芁因・手法が䞊列化のパフォヌマンスに圱響を及がす。䞊列化により、プロセッサの数あるいはSIMD呜什により同時凊理できるデヌタの数に比䟋しおプログラムの凊理速床が倍速化されるが、実際にはプログラム䞭に占める䞊列化可胜な領域の割合に巊右されたり、䞊列アルゎリズムの内容やハヌドりェアのキャッシュ胜力に䟝存したりする。アムダヌルの法則や停共有英語版も参照。

ロヌドバランシングは負荷の高いプロセッサから負荷の䜎いプロセッサぞずタスクを移すこずで、すべおのプロセッサをビゞヌに保ずうずする。

単䞀CPUのシステムで正しく動䜜するプログラムでも䞊列環境ではそうではないこずもある。これは同䞀のプログラムの耇数のコピヌが互いに干枉しあう䟋えば、同時に同じメモリ領域を読み曞きするからである。そのため、䞊列環境では入念なプログラミング排他制埡が必芁ずなる。

もしコンピュヌタにプロセッサがひず぀しかなく、なおか぀SIMD呜什をサポヌトしない堎合は逐次凊理しかできず、䞊列凊理䞊列蚈算はできない。䞀方、䞊行凊理䞊行蚈算は可胜である堎合もある。䟋えば汎甚的なオペレヌティングシステムではごく短時間で実行タスクを切り替えお耇数のタスクを疑䌌的に同時実行するこずのできるマルチタスクシステムが採甚されるこずが倚い。䞊行凊理はスルヌプットの改善のためではなく、䞻にシステムの応答性の改善のために利甚される。

自動䞊列化

[線集]

自動䞊列化ずは、䞊列化コンパむラを䜿甚しお、字面的にそのたた解釈すれば逐次的に蚈算を行うようなプログラムの゜ヌスコヌドを倉換し、䞊列蚈算を行うようなオブゞェクトコヌドを埗る手法である。䞊列蚈算機の䞊列蚈算胜力を掻甚するために行われる。自動䞊列化の目的はプログラマを退屈で゚ラヌの起きやすい䞊列化䜜業から解攟するこずである。技術的には非垞に進歩したが、必芁なプログラム解析の耇雑さやコンパむル時には䞍明な芁因䟋えば、入力デヌタの範囲などのために、逐次的なプログラムの完党な自動䞊列化は未だ達成されおいない。

自動䞊列化で䞻に焊点が圓おられるプログラム制埡構造はルヌプである。なぜなら、䞀般的にプログラムの実行時間のほずんどは䜕らかのルヌプの䞭で消費されるからである。自動䞊列化コンパむラはルヌプを分解し、繰り返しが別々のプロセッサで䞊行に実行されるようにする。

䞊列プログラミングモデル

[線集]

䞊列プログラミングモデルずは、䞊列なアルゎリズムを衚珟し、アプリケヌションを動䜜環境である䞊列システムに適合させるための゜フトりェア矀である。これらの゜フトりェアは䞊列化ツヌルキットなどずも呌ばれる。䞊列プログラミングモデルが扱う領域には、アプリケヌション、蚀語、コンパむラ、ラむブラリ、通信システム、䞊列入出力などがある。これは明瀺的な䞊列化の手法であり、自動䞊列化の適甚の難しさを避けおいる。䞊列プログラムの生産性を高めるため、䞊列アプリケヌションの開発者は適切な単䞀たたは耇数の䞊列プログラミングモデルを遞んで䜿甚する。

䞊列プログラミングモデルの実装方法にはいく぀か皮類がある。既存の逐次凊理蚀語甚のラむブラリ、蚀語の拡匵仕様、たたはたったく新しい実行モデルなどである。それらはさらに2皮類に倧たかに分類される。メモリ共有型ずメモリ分散型である。しかしながら、この2぀の境界は曖昧なものずなっおいる。

䞊列プログラミングモデルの䟋

[線集]

関連項目

[線集]