【问题标题】:failed to create more than one thread with #pragma omp parallel for无法使用#pragma omp parallel for 创建多个线程
【发布时间】:2013-03-14 10:57:23
【问题描述】:

所有。 我是 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 文件。它没有给出关于优化这个循环的任何内容,但它可以给出一些关于如何优化其他循环的建议。 我对此感到困惑。

【问题讨论】:

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


    【解决方案1】:

    我认为问题在于您没有放置适当的项目设置:

    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;
    }
    

    【讨论】:

    • 是的。你说的对!我在一个导出 dll 的项目中编写这些代码,而导入 dll 的执行项目是另一个项目。所以我忘了把执行项目设置。
    • 嗨,诺加德。非常感谢您的回答。我添加了一个我未能解决此问题的原因。请回答一下好吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多