全部。 我是 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 文件。它没有给出任何关于该循环的优化的信息,但它可以提供一些关于如何优化其他循环的建议。 我对此很困惑。
最佳答案
我认为问题是您没有设置适当的项目设置:
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;
}
关于c++ - 无法使用 #pragma omp parallel for 创建多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407306/