タスク並列性
From Wikipedia, the free encyclopedia
並列計算が可能な環境、例えばマルチソケットあるいはマルチコアによるマルチプロセッサのシステムにおいて、タスク並列性は各プロセッサが異なるスレッド(あるいはプロセス)を同一または異なるデータに対して実行することで得られる。一般的なケースでは、各実行スレッドは作業の実行に伴い他の実行スレッドと通信を行う。通信はワークフローの一部として、あるスレッドから次のスレッドにデータを渡す(双方のスレッドが参照可能な同一メモリ空間内のデータを書き換える)ことで行われる。
単純な例として、タスク "A" と "B" を実行するとき、ある CPU "a" にタスク "A" を行わせ、同時に別の CPU "b" にタスク "B" を行わせることで、単一のCPUに両方のタスクを順番に逐次実行させる場合と比べて処理の実行時間を短縮させることが可能である。通常、タスクを実行するCPUをアプリケーションソフトウェアレベルで明示的に指定することはほとんどなく、プロセスまたはスレッドといった抽象化された実行単位を割り当てるだけにとどめて、実際の計算ノード(例えばローカルコンピュータ上のマルチコアCPUにおける各プロセッサコアや、ネットワーク上の仮想化されたサーバーインスタンスなど)へのプロセス/スレッド割り当てはオペレーティングシステムやフレームワークが担当する。したがって、計算ノードのビジー状況によっては、分配したタスクが異なる計算ノードで実行されず、単一の計算ノードで逐次実行されるということも起こりうる。
タスク並列性は、データの並列性ではなく処理の分散した(並列化された)性質に焦点を置く。実際のプログラムのほとんどはタスク並列性とデータ並列性の間のどこかに落ち着く。