我想知道在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/