双核超线程:我应该使用4个线程还是3个或2个?

Meh*_*dad 15 multithreading hyperthreading

如果您同时生成多个线程(或进程),假设任务受C​​PU限制,最好是生成多少个物理处理器数量或逻辑处理器数量?或者最好在两者之间做一些事情(例如,3个线程)?

性能是否取决于正在执行的指令类型(例如,非本地内存访问是否与缓存命中有很大不同)?如果是这样,在哪种情况下利用超线程更好?


更新:

我问的原因是,我记得在某个地方读过,如果你的任务数与虚拟处理器的数量一样多,那么同一物理内核上的任务有时会使某些CPU资源匮乏并阻止彼此获得所需的资源,可能会降低性能.这就是为什么我想知道是否拥有与虚拟内核一样多的线程是一个好主意.

Chr*_*ain 5

表现取决于各种各样的因素.大多数任务都不是严格的CPU限制,因为即使所有数据都在内存中,它通常也不在处理器缓存中.我见过一些例子(比如这个),其中内存访问模式可以显着改变给定"并行"进程的性能概况.

简而言之,对于所有情况都没有完美的数字.