【问题标题】:OpenMP: Why are these omp parallel sections not executed with multiple threads?OpenMP:为什么这些 omp 并行部分不使用多个线程执行?
【发布时间】:2013-07-17 04:39:42
【问题描述】:

我正在尝试并行化一些代码,但我遇到了(可能是愚蠢的)问题。下面的示例代码返回“12”,尽管我期望“21”。

omp_get_max_threads() 返回 8,omp_get_num_threads() 返回 1,当我在此块中的任何位置调用它们时,omp_get_thread_num() 返回 0。我想我可以得出结论,它只是由主线程按顺序执行。

#include <omp.h>
#include <iostream>
#include <Windows.h>

using namespace std;

int main() {
    #pragma omp parallel sections num_threads(2) 
    {
        #pragma omp section 
            { Sleep(200);
              cout << "1"; }
        #pragma omp section 
            { cout << "2"; }
    }
}

我做错了什么?如何强制并行处理这些部分?

对于上下文:我正在从两个 USB 3.0 摄像头流式传输数据,并且顺序调用每个摄像头的图像非常慢,以至于我正在丢失帧。我想基本上为每个相机留出一个线程来不断地要求它的图像。

This question 有类似的标题,但没有帮助。我正在使用 Visual Studio 2010。

【问题讨论】:

  • 您是否在项目设置中激活了 omp 支持并链接了 lib?
  • 你试过 nowait 关键字吗?

标签: c++ parallel-processing openmp


【解决方案1】:

cmets 是正确的:我忘记在项目设置中设置 OMP 支持。

值得注意的是,我可以从相机传输的帧数下降了。最大化使用的带宽并不像我想象的那么简单。

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多