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 回答