所有。 我是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文件。它没有提供关于此循环优化的任何信息,同时它可以提供有关如何优化其他循环的一些建议。 我对此感到困惑。
答案 0 :(得分: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;
}