タスク並列性

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。みそがい (会話 | 投稿記録) による 2016年3月11日 (金) 10:17個人設定で未設定ならUTC)時点の版 (Okipow (会話) による ID:58906882 の版を取り消し)であり、現在の版とは大きく異なる場合があります。

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

詳細

マルチプロセッサのシステムにおいて、タスク並列性は各プロセッサが異なるスレッド(あるいはプロセス)を同一または異なるデータに対して実行することで得られる。一般的なケースでは、異なる実行スレッドは作業を行うに伴い他の実行スレッドと通信を行う。通信はワークフローの一部として、あるスレッドから次のスレッドにデータを渡すことで行われる。

単純な例として、並列計算環境でタスク "A" と "B" を実行したいと望む場合、CPU "a" にタスク "A" を行わせ、CPU "b" にタスク "B" を同時に行わせ、これにより処理の実行時間を短縮させることが可能である。タスクは下記に示すような If文で割り当てることができる。

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

下記の擬似コードでタスク並列性を示す:

program:
...
if CPU="a" then
   do task "A"
else if CPU="b" then
        do task "B"
end if
...
end program

本プログラムの目的は総和("A+B")を行うことである。上記のようなコードを記述し 2 プロセッサのシステム上で動作させると、ランタイムでは下記のようなコードが実行される。

  • SIMD システムでは、両方の CPU がコードを実行する。
  • 並列計算の環境では、いずれの CPU も同じデータにアクセスを行う。
  • "if" 節により、CPU 同士に違いが生じる。CPU "a" は "if" で真になり、CPU "b" は "else if" で真になり、現在、両方の CPU がコードブロックを同時に動作させ、異なるタスクを同時に実行する。

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

program:
...
do task "A"
...
end program

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

program:
...
do task "B"
...
end program


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

参考文献

  • Quinn Michael J, Parallel Programming in C with MPI and OpenMP McGraw-Hill Inc. 2004. ISBN 0-07-058201-7

関連項目