让我们假设我们有固定数量的计算工作,没有阻塞,睡眠,I/O等待。这项工作可以很好地并行 - 它由100M小而独立的计算任务组成。如何在4核CPU上执行相同的计算:4个线程或50个线程?
4核CPU的运行速度是多少?运行4个线程还是...可以说50?为什么第二个变体应该是slover和多少slover?
正如我所假设的:当您在4核CPU上运行4个重线程而没有另一个CPU消耗进程/线程时,调度程序可以不在内核间移动线程;在这种情况下没有理由这样做。 Core0(主CPU)将负责执行每秒250次硬件定时器(基本Linux配置)和其他硬件中断处理程序的中断处理程序,但其他内核可能不会感到任何担忧。
上下文切换的成本是多少?为不同的上下文存储和恢复CPU寄存器的时间? CPU内部的缓存,管道和各种代码预测事物呢?我们可以说,每当我们切换上下文时,我们都会伤害CPU中的缓存,管道和一些代码解码设施?因此,在单个内核上执行的线程越多,与串行执行相比,他们可以一起完成的工作就越少?
关于多线程环境中的缓存和另一个硬件优化问题对我来说是一个有趣的问题。
答案在很大程度上取决于应用程序,系统和机器。但它可能大于4,但远远少于50个线程。你是否尝试用4,6,8,10线测量? – 2012-02-07 20:39:31
4个线程(或8个超线程)。较少的数据部分。更好的缓存属性。 – bestsss 2012-02-07 20:42:48