2

すべて。私はOpenMPの初心者です。次のようにOpenMPを使用したい:

float* Arrays;
int OneArrayLength = 100;
float* ArrayPointers[ArrayNums];
for(int i = 0; i < ArrayNums; i ++)
{
    ArrayPointers[i] = Arrays + i*OneArrayLength;
}
#pragma omp parallel for
for i = 0 to LastPointer
{
    Algorithm al;
    al.process(ArrayPointers[i])
}

そして、それは私が期待したように機能しませんでした。コードをコンパイルして実行することはできますが、速くなりませんでした。

更新:@nogardに感謝します。(openmp)をサポートするためのプロジェクト設定の設定は実際に機能しました。私がこの問題を解決できなかったもう一つの理由があります。Interl診断ツールを使用して.gapファイルを取得します。そして、それはこのループの最適化について何も与えませんでしたが、他のループを最適化する方法についていくつかの提案を与えることができました。私はこれについて混乱しています。

4

1 に答える 1

4

問題は、適切なプロジェクト設定を入れていないことだと思います:

Configuration Properties -> C/C++ -> Language -> Open MP Support -> Yes (/openmp)

デフォルトでは、このフラグは設定されていないため、OpenMP は単に無効になっています

OpenMP スレッドの数をテストするには、次の簡単なプログラムを実行できます。

int iam = 0;
int np = 1;

#pragma omp parallel default(shared) private(iam, np)
{
  #if defined (_OPENMP)
    np = omp_get_num_threads();
    iam = omp_get_thread_num();
  #endif
  std::cout << "Hello from thread " << iam << " out of " << np << std::endl;
}
于 2013-03-14T11:07:22.663 に答える