C++ 17標準で提案されている新しい並列ライブラリ機能をいじくり回そうとしていましたが、機能させることができませんでした。 g++ 8.1.1
およびclang++-6.0
および-std=c++17
の最新バージョンでコンパイルしようとしましたが、どちらも#include <execution>
、std::execution::par
などをサポートしていないようです。
並列アルゴリズムの cppreference を見ると、アルゴリズムの長いリストがあり、主張しています
技術仕様は、
algorithm
、numeric
、およびmemory
からの次の69アルゴリズムの並列バージョンを提供します。(... long list ... )
アルゴリズムは準備ができているように聞こえます「紙の上」ですが、まだ使用する準備ができていませんか?
this SO question では1年以上前から、これらの機能はまだ実装されていなかったと答えています。しかし、今では何らかの実装が期待されています。 。すでに使用できるものはありますか?
https://en.cppreference.com/w/cpp/compiler_support を参照して、すべてのC++
機能実装ステータスを確認できます。あなたの場合、「Standardization of Parallelism TS
」を検索するだけで、MSVC
とIntel C++
コンパイラのみがこの機能をサポートするようになります。
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;
}