2016-04-28 4 views
0

私はこの質問に対する答えはコンパイラ/ OS固有のものかもしれないことを理解していますので、可能な限りタイトルの詳細を提供しようとしました。g ++コンパイルされたコードのデフォルト動作は、Intelプロセッサ(Linux)上のスレッドの観点からですか?

1から100万までのすべての数値の合計など、非常に単純なループをコンパイルするとします。このコードをIntelプロセッサ(i7-3770k)で実行すると、デフォルトで複数のスレッドが利用されますか?明示的にループを並列化してパフォーマンスを向上させるために立っていますか?

+0

スレッドのコードは明示的に記述する必要があります。しかし、i7はコードを非線形に実行するかもしれません。[out-of-order execution](https://en.wikipedia.org/wiki/Out-of-order_execution)を参照してください。 –

+0

私は糸に関してすぐに何も見ませんでした。しかし、... gcc.gnu.orgから "ベクトル化はflag -ftree-vectorizeとデフォルトで-O3で有効になります。"だからあなたはそれを求めずにベクトル化を取得します。 – Matt

答えて

0

C++は、あなたが使用するものだけを支払うイディオムを使用します。マルチスレッドを有効にすると、暗黙的にマルチスレッド化しないスレッドにペナルティが課されます。だからあなたはそれを自分で有効にする必要があります。

つまり、C++ 17ではparallel algorithmsを受け取るか、1つ書くことができます。それはそれほど難しくありません。