web-dev-qa-db-ja.com

C ++ 17並列アルゴリズムは既に実装されていますか?

C++ 17標準で提案されている新しい並列ライブラリ機能をいじくり回そうとしていましたが、機能させることができませんでした。 g++ 8.1.1およびclang++-6.0および-std=c++17の最新バージョンでコンパイルしようとしましたが、どちらも#include <execution>std::execution::parなどをサポートしていないようです。

並列アルゴリズムの cppreference を見ると、アルゴリズムの長いリストがあり、主張して​​います

技術仕様は、algorithmnumeric、およびmemoryからの次の69アルゴリズムの並列バージョンを提供します。(... long list ... )

アルゴリズムは準備ができているように聞こえます「紙の上」ですが、まだ使用する準備ができていませんか?

this SO question では1年以上前から、これらの機能はまだ実装されていなかったと答えています。しかし、今では何らかの実装が期待されています。 。すでに使用できるものはありますか?

17
Romeo Valentin

https://en.cppreference.com/w/cpp/compiler_support を参照して、すべてのC++機能実装ステータスを確認できます。あなたの場合、「Standardization of Parallelism TS」を検索するだけで、MSVCIntel C++コンパイラのみがこの機能をサポートするようになります。

3
Nan Xiao

Intelは、C++ 17標準に準拠したParallel STLライブラリをリリースしました。

GCCにマージされる です。

12
Florian Weimer

GCC 9にはそれらがあります

https://gcc.gnu.org/gcc-9/changes.html で言及

並列アルゴリズムと(Thread Building Blocks 2018以降が必要)。

リリースタグを取得したら、試してみます。 「スレッドビルディングブロック2018」には何が必要になるのでしょうか。

GccはまだParallelism TSを実装していません( https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017 を参照)

ただし、libstdc ++(gccを使用)には、同等の並列アルゴリズムの実験モードがあります。 https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html を参照してください

動作させる:

並列機能を使用するには、追加のコンパイラーとランタイムのサポート、特にOpenMPのサポートが必要です。このサポートの追加は難しくありません。コンパイラフラグ-fopenmpを使用してアプリケーションをコンパイルするだけです。これは、libgomp、GNU Offloading and Multi Processing Runtime Library、存在が必須である)にリンクします。

コード例

#include <vector>
#include <parallel/algorithm>

int main()
{
  std::vector<int> v(100);

  // ...

  // Explicitly force a call to parallel sort.
  __gnu_parallel::sort(v.begin(), v.end());
  return 0;
}
3
KarlM