2016-10-02 9 views
6

STLの検索アルゴリズムの並列バージョン(std :: find、std :: find_ifなど)は、基準に一致する範囲の最初の要素にイテレータを返すことを保証しますか?STL並列検索アルゴリズムの保証

ドキュメントでは、このような場合には明示的に言及していません。また、 'C++ Concurrency in Action'では、具体的にではないが最初の要素を返す実装があります。

+1

彼らは、彼らが非パラレルのカウンターパートとして機能しないので、ほとんど役に立たないとは思わなかった。 –

+2

C++標準ライブラリを意味しますか?もしそうなら、(現在、C++ 14の時点で)並列アルゴリズムと直列アルゴリズムの間に正式な区別はありません。アルゴリズムの動作は明確に規定されており、それを逸脱すると実装が非準拠になります。だからそれは本当にあなたが求めているアルゴリズムに依存します。 – juanchopanza

+0

はい、私は標準のものを意味します。私は彼らがシリアルバージョンと同じであると仮定しましたが、この本で少し混乱していました - 私はそれが単なるより簡単な例だと思います。どうもありがとう! – danielgharvey

答えて

2

標準ライブラリアルゴリズム*std::find, std::find_ifなど)の動作は、C++標準でよく指定されています。 C++ 14以降、並列アルゴリズムの動作に例外はありません。これは、仮説的な並列実装が依然としてこれらの要件を遵守する必要があることを意味します。


*コメントから、OPは、C++標準ライブラリではなく、標準テンプレートライブラリを意味します。私は、STLが異なるルールのセットを定義する可能性があるため、区別します。

+0

ハングアップします。 C++標準のfind_ifは入力イテレータに対して定義されています。おそらくパラレル版はもっと強いものが必要なので、完全に同等ではありません。この場合私にとっては重要なことではありませんが、逐次版と並列版の間で何が同じであることが保証されているのかとは分かりません。パラレルバージョンの完全な仕様があるのだろうか?私はそれを見つけることができません。 – danielgharvey

+0

@danielgharvey要点は、現在の標準ではパラレルバージョンが存在しないことです。並列実装では、指定されたセマンティクスを尊重する必要があります。 – juanchopanza