タスク並列性とは
タスク並列性(Task Parallelism)は、並列コンピューティングの一形態であり、複数のプロセッサを活用して計算処理を同時に行うことを指します。この手法は、複数の独立したタスクを複数のプロセッサに分散して実行することに重点を置いています。
タスク並列性は、
データ並列性とは対照的です。
データ並列性では、同じ処理を異なるデータに対して並行して実行しますが、タスク並列性では、異なる処理を異なるプロセッサで並行して実行します。タスク並列性は、関数並列性や制御並列性とも呼ばれることがあります。
仕組み
マルチプロセッサ環境において、タスク並列性は各プロセッサが異なるスレッドまたは
プロセスを実行することで実現されます。これらのスレッドは、同一または異なるデータに対して処理を行い、必要に応じて相互に通信します。通信は、データを受け渡したり、
共有メモリ空間内のデータを更新することで行われます。これにより、複数のタスクが並行して進み、全体の処理時間を短縮できます。
具体例
例えば、タスクAとタスクBがある場合、
CPU aにタスクAを実行させ、同時に
CPU bにタスクBを実行させることで、単一の
CPUで順番に実行するよりも早く処理を完了できます。通常、タスクを実行する
CPUは、アプリケーション側で明示的に指定するのではなく、
オペレーティングシステムやフレームワークが
プロセスやスレッドの抽象化された実行単位を各計算ノードに割り当てます。したがって、システムの負荷状況によっては、タスクが同じ計算ノードで連続して実行されることもあります。
タスク並列性の応用
タスク並列性は、処理を分散化し、
並列化することに焦点を当てています。実際のプログラムでは、タスク並列性と
データ並列性の両方が組み合わされることが多いです。
以下は、タスク並列性を示す
擬似コードの例です。
program:
...
if
CPU="a" then
do task "A"
else if
CPU="b" then
do task "B"
end if
...
end program
このコードは、総和 ("A+B") を求めることを目的としています。2つのプロセッサシステムで動作させると、以下のようになります。
program:
...
do task "A"
...
end program
program:
...
do task "B"
...
end program
この例では、各
CPUが異なるタスクを並行して実行しています。
まとめ
タスク並列性は、複数のプロセッサを効果的に利用し、複雑な計算処理を高速化するための重要な手法です。タスクの分割と分散によって、並列処理の効率を最大限に引き出すことができます。これにより、より複雑な問題をより短時間で解決することが可能になります。
参考文献
Quinn, Michael J. (2004). Parallel Programming in C with MPI and
OpenMP. McGraw-Hill Inc.
関連項目
データ並列性
*
マルチタスク