首页 > 解决方案 > 如何在 OpenMP 中设置线程数

问题描述

我正在尝试使用 OpenMP 设置程序中的线程数。出于某种原因,即使最大线程数是 4,我的程序也只使用了 1 个核心。我在 MacOSX 上,但我使用的是 gcc 编译器(特别是:gcc9.1.0 和 OpenMP 4.5 版)

#include <fstream>
#include <chrono>

#include <omp.h>

int main() {
  int maxthreads = omp_get_max_threads();

  std::cout << "maxthreads: " << maxthreads << std::endl;

  omp_set_dynamic(0);
  omp_set_num_threads(4);
  #pragma omp parallel num_threads(4)
  {
     int id = omp_get_thread_num();
     #pragma omp critical
     std::cout << "Hi from " << id << std::endl;
  }
}

我得到的结果是:

4
Hi from 0

但我预计“Hi from i”会被打印 4 次。

标签: c++openmp

解决方案


我需要在我的 cmake 中添加标志:

-DCMAKE_CXX_FLAGS=-fopenmp-DCMAKE_C_FLAGS=-fopenmp


推荐阅读