OpenMP:为什么这些omp并行部分不能用多个线程执行?

时间:2013-07-17 04:39:42

标签: c++ parallel-processing openmp

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

omp_get_max_threads()返回8,当我在这个块的任何地方调用omp_get_num_threads()时,omp_get_num_threads()返回0并且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问题有类似的标题,但没有帮助。我正在使用Visual Studio 2010。

1 个答案:

答案 0 :(得分:1)

评论是正确的:我忘了在项目设置中设置OMP支持。

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