c++ - 无法使用 #pragma omp parallel for 创建多个线程

标签 c++ multithreading visual-c++ openmp

全部。 我是 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/

相关文章:

c++ - std::map 模板成员函数指针

iphone - 在线程中处理任务的类

c++ - 使用 setw : to eof or not to eof? 读取

c++ - VS2008 : Can I build a project with 2 CPP files of the same name in different folders?

c++ - 在构造函数中传递指向对象的指针

c++ - 如何设置此 visual studio (2015) 自定义构建步骤(工具?)。基本上我想要一个修改头文件的预处理器步骤(c++)

c++ - 创建对象 vector

java - 观察者/可观察模式的链接

java - 这个 LocalThread 会覆盖其他 Servlet 请求的数据吗?

windows - 在所有未使用的情况下,进程外 COM 服务器最终是否应该停止?