【问题标题】:#pragma omp parallel num_threads is not working#pragma omp 并行 num_threads 不起作用
【发布时间】:2014-06-25 19:39:20
【问题描述】:
    #include<omp.h>
    #include<stdio.h>
    #include<stdlib.h>

    void main(int argc, int *argv[]){


   #pragma omp parallel num_threads(3)
   {

    int tid = omp_get_thread_num();
    printf("Hello world from thread = %d \n",tid);
    if(tid == 0){
        int nthreads = omp_get_num_threads();
        printf("Number of threads = %d\n",nthreads);
    }
   }

  }

我正在学习 OpenMP,但我不明白为什么我指定线程数 3 后它只执行一个线程? 程序输出:

   Hello world from thread = 0
   Number of threads = 1

【问题讨论】:

  • 您可能以错误的方式编译它。以gcc 为例,如果您分别编译和链接,请确保有-fopenmp 用于链接 编译。其他编译器也应该类似。
  • 你是如何编译这个的?如果是在 Visual Studio 中,则必须explicitly enable OpenMP

标签: c++ c parallel-processing openmp


【解决方案1】:

您需要使用-fopenmp 编译您的程序。

g++ a.cc -fopenmp

【讨论】:

    【解决方案2】:

    在 VisualStudio 中,只需打开 OMP。可以参考https://msdn.microsoft.com/de-de/library/fw509c3b(v=vs.120).aspx

    【讨论】:

      【解决方案3】:

      omp_get_num_threads() 返回正在使用的线程总数

      omp_get_thread_num() 返回当前线程 ID

      你应该使用前一个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2021-03-22
        • 2013-09-20
        • 2021-06-07
        相关资源
        最近更新 更多