关于线程数的奇怪现象

时间:2019-07-11 03:01:11

标签: c++ multithreading openmp

我的CPU有2个物理核心,并且支持超线程。因此,我认为我可以管理4个线程。 (4个逻辑核心) 但是,使用openmp,我可以生成更多的内核。真奇怪。

我是并行编程的新手,我了解到有几种方法可以设置我想使用的线程数。我在下面使用了两种方法。

  1. omp_set_num_threads(4);
  2. #pragma omp prarallel num_threads(4);
#pragma omp parallel num_threads(100)
{
    printf("%d\n", omp_get_thread_num());
#pragma omp for
    /* code I wanna parallelize */
} 

我认为奇怪的是,我的CPU中逻辑核心号为4,但是为什么omp_get_thread_num()返回0到99。我认为这是不可能的,{100的含义是什么1}}?

1 个答案:

答案 0 :(得分:2)

您可以拥有比核心更多的线程。哪个线程运行到哪个CPU内核取决于操作系统(在Windows中,您可以设置关联性)。操作系统将根据其调度程序运行线程。

核心数实际上是可以同时运行 的线程数。

如果您有两个线程,每个线程花费1秒,而您只有1个核心,那么它们将在大约2秒钟内完成,如果您有2个核心(并且它们并行运行),则它们将在大约1秒内完成第二。