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

kir*_*off 5 c++ parallel-processing multithreading openmp multiprocessing

我想知道是否可以在具有8个内核的硬件上同时运行8个以上的线程.

如果是这样,使用openMP来并行化N个计算,我可以创建大小的块,比如N/8,并且在每个线程中进一步分叉成(N/8)/ 8个线程,可能还有更多?

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

谢谢!!

Pét*_*rök 10

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

最重要的是,您需要在特定环境中测量特定情况下的性能.

另请参见此相关主题.