|
原帖由 阿摩 于 2008-12-29 21:23 发表 ![]()
你的程序试了一下.
选不同的线程数,计算的总数据量是否相同?
线程数为1时,这时是否没有用于发射的线程?
发现一个问题,当设置线程数量等于cpu核心数时,得分很低,而这时cpu的利用率是满载,最后计算完成时,cpu ...
呵呵, 你看的很仔细哦, 在线程数量为1的时候, 就只有一个线程, 早期的版本并没有使用这个办法, 导致在单核CPU上成绩特别差.
运算量完全没有变化.
其实Windows看到CPU占用率, 应该是从系统的CPU时间统计的, 和物理CPU是否被利用没有特别必然的关系, 比如调用Sleep()使用的时候会发现也有CPU占用.
在4核的CPU上使用2线程, 会发现CPU占用不是50%, 而是75%, 因为那个开启线程的线程一直在等待, 如果当前激活的线程低于2的时候, 就开启后面的线程.
不过我也测试过一些办法, 但是都不是特别理想, 希望能够实时监视当前线程数量, 但是又不希望占用CPU时间. 提高线程数量可以明显降低被白白占用的CPU时间, 但是又增加了线程切换的时间. 采用类似Timer的机制去侦测, 又担心有CPU时间被浪费. 现在的1.5倍的办法已经非常接近用1个线程运算结果的核心数量倍, 只是看起来比较粗笨.
不知有什么更好的方法 :(
[ 本帖最后由 japhsoncross 于 2008-12-29 21:41 编辑 ] |
|