作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 CPU 有 2 个物理内核,并且支持超线程。因此,我认为我可以管理 4 个线程。 (4 个逻辑核心)但是,使用 openmp,我可以生成更多的内核。很奇怪。
我是并行编程的新手,我了解到设置我想使用的线程数的方法很少。我在下面使用了两种方法。
#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
在 #pragma omp parallel num_threads(100)
中?
最佳答案
您可以拥有比内核更多的线程。哪个线程运行到哪个 CPU 核心取决于操作系统(在 Windows 中,您可以设置关联)。操作系统将根据其调度程序运行您的线程。
核心数实际上是可以同时运行的线程数。
如果你有两个线程,每个线程需要 1 秒,而你只有 1 个核心,那么它们将在大约 2 秒内完成,如果你有 2 个核心(并且它们并行运行),它们将在大约 1 秒内完成第二。
关于c++ - 关于线程数的奇怪现象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981066/
我是一名优秀的程序员,十分优秀!