OpenMP を使用して並列アルゴリズムに取り組んでいます。CPU 使用率から判断すると、私が書いた「シーケンシャル」コードの多くは、実際には並列で実行されています。
例えば:
#pragma omp parallel for if (par == "parallel")
for (int64_t u = 1; u <= n; ++u) {
for (int64_t v = u + 1; v <= n; ++v) {
....
}
}
フラグが設定されている場合、これは条件付きで並列です。フラグを設定すると、16 コアのマシンで 1500% の CPU 使用率が表示されます。フラグが設定されていない場合でも、250% の CPU 使用率が表示されます。
これは、自動並列化が行われているためだと思います。正しい?GCCはこれを行いますか?
順次実行時間と並列実行時間を比較する必要があるため、( など) の注釈が付けられていないコードは#pragma omp parallel...
1 つの CPU のみで実行したいと考えています。これを簡単に達成できますか?自動並列化を切り替えて、OpenMP で明示的に注釈を付けた並列処理を実行できる GCC フラグはありますか?