データ並列性とは? わかりやすく解説

データ並列性

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/01/26 04:36 UTC 版)

データ並列性: data parallelism)は、複数のプロセッサを用いて演算を行う並列コンピューティングの形態の一つである。データ並列性は、異なる並列計算ノードにデータを分配することに焦点を置いている。並列性の別の形態であるタスク並列性と対照をなす。ループレベル並列性 (loop-level parallelism) とも。

詳細

並列計算が可能な環境、例えばマルチソケットあるいはマルチコアによるマルチプロセッサのシステムにおいて、データ並列性は、各プロセッサが分配された各データ領域(データ中の別々の部分)に対して同じタスクを処理することによって得られる。

ある状況では、一つの実行スレッドがすべてのデータの演算を制御し、またある状況では、複数のスレッドが演算を制御するが、すべて同じコードを実行している。

たとえば、CPU A と B を持つ2プロセッサシステム上にて、あるデータ D に対してコードを実行する場合、CPU A に D の前半部分を処理させ、同時に CPU B に D の残り後半部分を処理させることで、実行時間を削減することができる。

より具体的な例として、二つの行列の加算を考える。データ並列性を実現するためには、CPU A は行列の前半のすべての要素を加算し、CPU B は行列の後半のすべての要素を加算する。二つのプロセッサが並列に動作するため、行列の加算は(理想的な場合)単一の CPU で同じ処理を実行する場合の半分の時間で完了する。

データ並列性は、データの処理(タスク並列性)ではなくデータの分散した(並列化された)性質に焦点を置く。実際のプログラムのほとんどはタスク並列性とデータ並列性の間のどこかに落ち着く。

ソフトウェアレベルでは並列化の実装単位にプロセススレッドが利用される。通常、タスクを実行するCPUをアプリケーションソフトウェアレベルで明示的に指定することはほとんどなく、プロセスまたはスレッドといった抽象化された実行単位を割り当てるだけにとどめて、実際の計算ノードへのプロセス/スレッド割り当てはオペレーティングシステムやフレームワークが担当する。また、プロセッサの命令レベルでのデータ並列化の概念および機構として、SIMD[1]およびSIMTがある。

データ量が十分に多く、かつデータごとの処理内容が十分に長い場合は、通例シングルコアCPUで処理を逐次実行するよりもマルチコアCPUで並列実行したほうが高速になるが、データ量が少なかったり、データごとの処理内容が極端に短かったり、あるいはキャッシュの偽共有英語版が発生してしまったりする場合は、かえって並列化のためのデータ分割処理やスレッドの起動および待ち合わせといった準備にかかるオーバーヘッドなどのほうがかさんでしまい、結果として逐次実行した場合よりも低速になるということもありえる。

下記の擬似コードでデータ並列性を示す。データは下記に示すようなif文で割り当てることができる。

program:
...
if CPU="a" then
    lower_limit := 1
    upper_limit := 50
else if CPU="b" then
    lower_limit := 51
    upper_limit := 100
end if
do i := lower_limit, upper_limit
    Task on d(i)
end do
...
end program

このプログラムの目標は、(たとえば)サイズ 100 のデータの配列 "d" を処理することである。上記のようなコードを記述し、2プロセッサシステム上で動作させると、ランタイムではそれを下記のように実行する。

  • 並列演算環境では、両方の CPU が "d" にアクセスしなければならない。
  • 各 CPU が互いに独立な lower_limitupper_limit のコピーを作成する機構があることを仮定する。
  • "if" 節が CPU ごとの処理を変化させる。CPU "a" では、"if" 節で真となり、CPU "b" では、"else if" 節で真となる。結果として、それぞれ独自の lower_limitupper_limit を持つ。
  • ここで、いずれの CPU も "d(i)のタスク" を実行するが、各 CPU が異なる "limits" を持っているため、"d" の異なる部分を同時に演算することができ、プロセッサ間にタスクをうまく配分することができる。

CPU "a" で実行されるコード:

program:
...
lower_limit := 1
upper_limit := 50
do i := lower_limit, upper_limit
    Task on d(i)
end do
...
end program

CPU "b" で実行されるコード:

program:
...
lower_limit := 51
upper_limit := 100
do i := lower_limit, upper_limit
    Task on d(i)
end do
...
end program

この概念は、任意の数のプロセッサに対して一般化できる。

脚注

参考文献

関連項目



データ並列性

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/25 13:20 UTC 版)

並列計算」の記事における「データ並列性」の解説

詳細は「データ並列性」を参照 データ並列性はプログラムループ本質的に備えている並列性であり、ループの各周回が各ノード並列処理されるようデータ配布する部分中心となる並列化されるループは、大きなデータ構造各要素について似たような処理を行うものである科学技術計算にはデータ並列性があることが多い。 ループ伝搬依存(loop-carried dependency)とは、ループにおいて以前周回結果依存して新たな周回計算が行われる性質をいう。ループ伝搬依存があると、ループ並列化できない例えば、以下のフィボナッチ数一部計算する擬似コード考えてみよう。 1: prev := 02: cur := 13: do:4: PREV := CUR5: CUR := CUR + PREV6: while (CUR < 10) このループでは、CUR以前CUR の値と PREV依存しており、その値は周回ごとに再計算されるため、並列化できない。つまり、ある周回での計算は、それ以前周回計算結果依存しているため、周回ごとに並列化することはできないのである問題大きくなるほど、可能なデータ並列性も多くなる傾向がある。

※この「データ並列性」の解説は、「並列計算」の解説の一部です。
「データ並列性」を含む「並列計算」の記事については、「並列計算」の概要を参照ください。

ウィキペディア小見出し辞書の「データ並列性」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



データ並列性と同じ種類の言葉


固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「データ並列性」の関連用語

データ並列性のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



データ並列性のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのデータ並列性 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの並列計算 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS