返回信息流直观上感觉应该是这样 但我测了下 发现似乎有问题
附件为测试结果 我机器为 双核 linux
pthread 2 io 0 cal 16777216 表示 2个线程 0次IO 16777216次计算
每次计算为
for(int j=0;j<100;j++) int tmp=j*j;
求解
附件(6.9KB) me.out
这是一条镜像帖。来源:北邮人论坛 / soft-design / #41375同步于 2011/11/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
对于计算密集型程序 线程越多是不是一定越慢?
mytifa
2011/11/15镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
在线程数大于CPU核数的情况下应该是这样的。。。线程间的切换也会消耗掉一定的CPU时间
【 在 mytifa (xiaofan) 的大作中提到: 】
: 直观上感觉应该是这样 但我测了下 发现似乎有问题
: 附件为测试结果 我机器为 双核 linux
: pthread 2 io 0 cal 16777216 表示 2个线程 0次IO 16777216次计算
: ...................
【 在 ox 的大作中提到: 】
: 在线程数大于CPU核数的情况下应该是这样的。。。线程间的切换也会消耗掉一定的CPU时间
我也这样想啊 但测试结果怎么不是这样
原来我也是这么认为的,不过有一天我发现用mencoder压片时,3个线程比2个线程要快,当时不知道为什么。最近有机会接触一个计算密集程序,终于知道了原因:有时线程之间为了完成同步会互相等待,在极端的情况下一个线程可以完全阻塞,等待另一个线程完成某个逻辑。有时还可能有一种情况,如果多个线程在一个处理器上运行时,他们可以共享已命中的缓存和已换入的页面,这可能比分开多个线程更有优势。在这种情况下,开大于CPU个数的线程可以利用数量掩盖部分线程互相等待带来的时间浪费。
另外,线程数目过大会带来更多的上下文切换,造成频繁的缓存置换甚至是页面交换,这个会影响总体的性能。
不过观察me.out,lz你每次的实验条件应该有所不同(不同的cpu占用,也许是因为系统中的其他内容),建议每一个case多跑几次求平均。
【 在 ox 的大作中提到: 】
: 在线程数大于CPU核数的情况下应该是这样的。。。线程间的切换也会消耗掉一定的CPU时间
: 【 在 mytifa (xiaofan) 的大作中提到: 】
: : 直观上感觉应该是这样 但我测了下 发现似乎有问题
: ...................
【 在 grapland 的大作中提到: 】
: 原来我也是这么认为的,不过有一天我发现用mencoder压片时,3个线程比2个线程要快,当时不知道为什么。最近有机会接触一个计算密集程序,终于知道了原因:有时线程之间为了完成同步会互相等待,在极端的情况下一个线程可以完全阻塞,等待另一个线程完成某个逻辑。有时还可能有一种情况,如果多个线程在一个处理器上运行时,他们可以共享已命中的缓存和已换入的页面,这可能比分开多个线程更有优势。在这种情况下,开大于CPU个数的线程可以利用数量掩盖部分线程互相等待带来的时间浪费。
: 不知道lz这个有没有这个情况。
我没有加任何锁或I/O阻塞,第二种有可能
Minor (reclaiming a frame) page faults: 581 对应于这一项么?
我看你每次的cpu占用不一样,有背景任务捣乱吧?
【 在 mytifa 的大作中提到: 】
:
: 【 在 grapland 的大作中提到: 】
: : 原来我也是这么认为的,不过有一天我发现用mencoder压片时,3个线程比2个线程要快,当时不知道为什么。最近有机会接触一个计算密集程序,终于知道了原因:有时线程之间为了完成同步会互相等待,在极端的情况下一个线程可以完全阻塞,等待另一个线程完成某个逻辑。有时还可能有一种情况,如果多个线程在一个处理器上运行时,他们可以共享已命中的缓存和已换入的页面,这可能比分开多个线程更有优势。在这种情况下,开大于CPU个数的线程可以利用数量掩盖部分线程互相等待带来的时间浪费。
: ...................
【 在 grapland 的大作中提到: 】
: 我看你每次的cpu占用不一样,有背景任务捣乱吧?
才差了%几而已 而且
User time (seconds): 6.72
System time (seconds): 0.00
这两项都是实际占用的时钟周期统计