非線形パイプライン

非線形パイプライン#

テンプレート関数 parallel_pipeline は線形パイプラインのみをサポートします。下の図のような、複雑なフローを直接処理するものではありません。

image0

ただし、この場合でもパイプラインを使用できます。次のように、フィルターを位相的に線形順序に並べ替えるだけです。

薄い灰色の矢印は、他の矢印の遷移的プロセスを暗示する元の矢印です。フィルターに線形順序を強制すると多くの並列性が失われるように見えるかもしれませんが、実際には、唯一の損失はパイプラインのレイテンシーのみであり、スループットは失われません。レイテンシーとは、トークンがパイプラインの最初から最後まで流れるのにかかる時間です。十分な数のプロセッサーが提供されると、元の非線形パイプラインのレイテンシーは 3 つのフィルターになります。これは、フィルター A と B およびフィルター D と E が同時にトークンを処理できるためです。

イメージ1

線形パイプラインでは、レイテンシーは 5 つのフィルターになります。フィルター A、B、D および E の動作は、パイプラインの次のフィルターに渡すこと以外に、フィルターで動作する必要のないオブジェクトを適切に制御するよう修正する必要があります。

位相に関係なく、処理能力は最も遅いシリアルフィルターによってまだ制限されているため、処理能力は同じままです。parallel_pipeline が非線形パイプラインをサポートする場合、プログラミングは複雑になり、スループットはそれほど向上しません。parallel_pipeline の線形制限は、利点と欠点のバランスが取れたトレードオフです。