++C++; // 未確認飛行 C

Task Parallel Library 概要(TPL)

目次

キーワード

概要

タスクスケジューリングによる並列処理。

予定


・タスク

小さなタスクを大量に並列に処理していく
実行順序は「fair ではない」
  パフォーマンス上の理由から LIFO で処理される
  (その方が局所性が効く)
タスクを登録してから、実際に実行されるまでに間が開いたりすることも

・スレッド、スレッドの再利用、タスクスケジューリング

スレッドは開始するのも大変だし、コンテキストスイッチが大変
CPU コア数分だけスレッドを立てて、使いまわすのが効率的
そこでタスクスケジューリング
  タスクをキューに登録しておく
  各スレッドは処理が終わり次第、キューを見に行って、次のタスクを開始

・Task クラス

StartNew

重たい処理の場合には
タスクの親子関係

継続(continuation)タスク

例外の伝搬

・Parallel クラスと PLINQ

並列処理の多くは Map-Reduce 型

対応付け(map)、あるいは、射影(project)
  x → f(x)
  集合の個々の要素に対して、何らかの処理を行う
  各要素は独立(同時に実行しても競合しない)

縮約(reduce)、あるいは、集計(aggregate)
  ∑ x_i
  わかりやすいのは総和や累積
  一般化すると、
    var sum = defautl(T);
    foreach (var x in list)
      sum = BinaryOperation(sum, x);
  BinaryOperation の部分がスレッドを超えた影響起こさないなら割と並列化が容易

このタイプの並列処理を行うのが Parallel クラスと PLINQ

[お問い合わせ](q)   ぷちカンパ