高度な並列プログラミングライブラリであるタスクプログラミングモデルが含まれています。タスクプログラミングモデルを使用すると、並列アルゴリズムを実装し、現在一般的となっているマルチコアコンピュータを活用することができます。タスクプログラミングモデルを使用して並列アルゴリズムを記述することで、標準的なスレッドプログラミングに関連した多くの問題を減らし、取り除くことができます。すべての点を含む多角形を定義する最小の点セットであるとします。これらの点がボード上に留められたくぎであると考えた場合、くぎを紐で作った輪で囲み、たるみがなくなるまで紐を張ると、凸包ができます。この場合、凸包は紐に接しているくぎです。アルゴリズムを使用できます。つのグループに分けます。つのグループの凸包が求められれば、それらを結合して全体の凸包を形成することができます。線の片側にある点のなかから、線から最も遠い位置にある点を求めます。この点は凸包上にも存在します。これらの線は再帰的に処理できます。凸包内にあると言えます。このアルゴリズムは、再帰的なステップを並列で実行することで、並列化できます。module()逐次アルゴリズムを並列アルゴリズムに変換するのに必要な追加コードはわずかです。これは、タスクプログラミングモデルでは、スレッドプログラミングの紛らわしくて乱雑な、バグが発生しやすいさまざまな側面が考慮されているためです。アルゴリズムを試してみましょう。同じ点セットについて並列アルゴリズムを試してみます。アルゴリズムに少しの修正を加えるだけで、かなりの高速化を実現できます。メモリ管理システムが見直され、複数のスレッドが実行されているときのメモリ処理が改良されました。違いが明確になります。メモリマネージャは問題の要求についていくことができなくなります。この点が改善され、パフォーマンスが大幅に向上しました。以下のグラフは、上記のグラフを生成するのに使用されたメモリを示しています。各ルーチンが改良されました。ルーチンの並列実装です。各要素の実行コストを予測することはできません。そのため、マルチコア間で問題を分割する最適な方法を推測する必要があります。までは、非常に簡単なヒューリスティック手法が使用されていました。高性能なヒューリスティック手法が使用され、より多くのケースで並列処理を有効に利用できます。ユーザーが問題の分割方法を指定できるようになりました。これにより、新しいヒューリスティック手法が最適に機能しないケースでも並列処理を活用できます。パフォーマンスはシングルスレッドと同じ程度です。同等のパフォーマンスになります。優れていますが、すべてのケースで最適というわけではありません。パフォーマンスが低下するケースとして、要素数が非常に少なく、各タスクの実行時間が長い場合が挙げられます。この場合、各要素をシングルタスクとして実行できるようにするアプローチが最も適しています。オプションを使用してユーザーがタスクのサイズを指定できます。以下は、このオプションの効果を示したものです。指定することで、パフォーマンスを改善することができます。十分な数の要素が存在する場合、ヒューリスティック手法は非常によく機能します。開発者がライブラリやルーチンに並列処理を追加するために使用するものと同じプログラミング手法です。どの程度加速できるかを示したものです。Trademarks。