c++ - 多线程 (openMP) - 有多少并行线程

标签 c++ multithreading parallel-processing multiprocessing openmp

我想知道在8核的硬件上是否可以并发运行超过8个线程。

如果是这样,使用 openMP 并行化 N 个计算,我可以创建大小为 N/8 的 block ,并在每个线程中进一步 fork 成 (N/8)/8 个线程,甚至更多?

嵌套并行化时会发生什么情况?我还有 8 个可用线程用于嵌套并行吗?

谢谢!!

最佳答案

8核在给定的时间点最多只能同时运行8个线程。但是,很大程度上取决于您的线程在做什么。如果他们正在执行 CPU 密集型任务,则不建议生成比内核数量更多的线程(几个可能没问题)。否则过多的上下文切换和缓存未命中将开始降低性能。但是,如果有大量 I/O,线程可能会阻塞很多,不使用 CPU,因此您可以并行运行更多线程。

底线是,您需要在特定情况下、特定环境中衡量性能。

另见 this related thread .

关于c++ - 多线程 (openMP) - 有多少并行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178108/

相关文章:

c++ - "data race"(不是真的)在通知条件变量并解锁关联的互斥锁之后

java - JVM 信号链 SIGPIPE

Python,使用字典的高效并行操作

c# - .Net 并行、任务 API 与常规线程

python - 如何在python中使用struct/class的 vector

c++ - 硬编码 HLSL 着色器

c++ - std 命名空间中的 operator<< 有什么作用?

c++ - “变量”声明为 'inline' 字段

multithreading - 线程多还是线程少?

Haskell - parMap 怎么了?