BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #41375同步于 2011/11/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

对于计算密集型程序 线程越多是不是一定越慢?

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