首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
专题开发/技术/项目
多核软件开发
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
如何提高四核的效率
[已结帖,结帖人:lvsonga]
加为好友
发送私信
在线聊天
lvsonga
Dia
等级:
可用分等级:
长工
总技术分:
7
总技术分排名:
264549
结帖率:
100.00%
发表于:
2008-07-07 13:50:15
楼主
大家好,我的电脑CPU是Q6600的四核,用VC6.0在一个工作区里开了四个工程,每个工程里都有一个纯C的程序在运行,四个程序类似,经任务管理器观察,当只运行一个程序时系统自动将任务分配到四个CPU,总的CPU占比并不是100%而是25%,程序运行时间为21秒。当我同时运行四个程序时,总的CPU占比是100%,但四个程序的运行时间上升到39秒,平均每个程序9.75秒,而不是21秒的四分之一5.25秒。我觉得效率下降的原因可能是数据在四个CPU间输送占用总线造成的。
请问有什么办法不让系统自动将C程序平均分配到四个CPU,而是将其指定在某个CPU或任意一个CPU,这样我四个程序各占一个CPU,CPU之间减少了数据传送,就可以提高效率了。
问题点数:
20
回复次数:
9
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lvsonga
Dia
等级:
可用分等级:
长工
总技术分:
7
总技术分排名:
264549
发表于:
2008-07-09 17:54:43
1
楼 得分:
0
我发现任务管理器中点进程右键选关系设置,里面可以将该进程固定在某几个CPU,非常方便,不用再学什么语言了,不过试了之后发现效率并没有提高,费思量...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
huyongzs
等级:
可用分等级:
富农
总技术分:
1069
总技术分排名:
19914
发表于:
2008-07-09 18:12:35
2
楼 得分:
10
这个就属于是对于操作系统理论知识的匮乏。说明楼主顶多只是会一些编程语法。对于高级编程知识知道少。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lvsonga
Dia
等级:
可用分等级:
长工
总技术分:
7
总技术分排名:
264549
发表于:
2008-07-09 18:29:12
3
楼 得分:
0
请给个不匮乏的解释
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aero_boy
老牛
等级:
可用分等级:
掌柜
总技术分:
2792
总技术分排名:
8253
发表于:
2008-07-09 23:28:52
4
楼 得分:
10
多核能不能提高效率,要看具体的你的程序的执行流程和各个进程对数据的依赖情况.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
huyongzs
等级:
可用分等级:
富农
总技术分:
1069
总技术分排名:
19914
发表于:
2008-07-17 23:14:40
5
楼 得分:
0
效率下降的原因不是CPU之间的传输,而是一个操作系统的调度算法的问题。也和实际中程序的运行环境(周围的程序和运行硬件,以及这个程序本身的运行特点比如IO密集度)相关。
在现在系统中程序并非是像dos等单任务单用户系统一样直接占用CPU,而是采取时间分片的原则。每个进程按照一定的算法轮流运行固定的时间长度。在什么时候执行一个进程,什么时候暂停一个进程根据算法有不同的条件判断(一般都是“高明”但是简洁的)。
另外其实现代的操作系统一般都支持多核,比如windowsNT系列和linux,unix,要把过去单核运行的程序改成多核其实不是想象的那样子大动干戈,还是相对很好扩展的。甚至于他们在我们只用单核的年代就已经扩展出来了多核运行的能力只不过我们没有用到没注意到。
我所以我的意思是:
效率下降的主要原因其实不是CPU之间的交换而是和多进程多核运行的环境下边的问题包括你的硬件,当时的系统运行的其他程序。相关的操作(比如是否乱点鼠标,或者像网络设备一样的不可预测的任务制造者繁忙都有关系),程序本身特点比如是否IO密集或者CPU密集。
调度算法不同自然效率也就不一样。一个CPU一个进程(其实多任务操作系统不能完全做到,总是要分出时间做其他的事情)未必就比4个CPU效率更好。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
huyongzs
等级:
可用分等级:
富农
总技术分:
1069
总技术分排名:
19914
发表于:
2008-07-17 23:19:14
6
楼 得分:
0
另外一个进程的任务被分配也和一定的分配算法有关系。该算法一般在不同的情况提高效率的效果不一样。可能同时执行四个进程反倒充分利用了计算机的硬件效率更好。这个要结合程序的特点来看。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
WHHY
Albert Zhu 朱文昊
等级:
可用分等级:
贫农
总技术分:
320
总技术分排名:
48007
发表于:
2008-10-25 09:38:41
7
楼 得分:
0
兄弟,在进程管理器里,对你执行的每一个进程,可以选择"关系设置",设置允许执行该进程的CPU,你可以自行设置CPU和你各个工程的关联关系,然后重新测试,看看有没有改进
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
cdef9108
等级:
可用分等级:
富农
总技术分:
400
总技术分排名:
41255
发表于:
2008-10-29 22:43:46
8
楼 得分:
0
操作系统应该有亲缘性,就是尽量同一个线程会分配给上次运行它的cpu里进行执行。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dydlynudt
等级:
可用分等级:
长工
总技术分:
25
总技术分排名:
179320
发表于:
2008-11-12 16:51:30
9
楼 得分:
0
要纠正楼主的几句话:
问题1.当只运行一个程序时系统自动将任务分配到四个CPU,总的CPU占比并不是100%而是25%。
如果你的程序是单线程的话,你只启动一个进程,那肯定处理器利用率只有25%了,而现在你的处理器利用率只有25%,所以楼主的程序肯定是单线程的。
问题2.21秒的四分之一5.25秒。
4倍加速度只是理论上的,楼主看看关于加速比的Amdahl定律就知道了,所以不可能达到楼主说的4倍。
问题3.当我同时运行四个程序时,总的CPU占比是100%,但四个程序的运行时间上升到39秒,平均每个程序9.75秒,而不是21秒的四分之一5.25秒。
这句话的问题最大,平均每个程序9.75秒?呵呵,四个程序是并行执行的,每个基本上都是39,不可能是楼主算的平均时间。但为什么比21秒还要慢,我猜测如果楼主的程序是数据密集型的运算,那么可能这四个程序的线程同时访问共享L2-Cache时发生了Cache访问冲突(相信楼主的处理器的L2-Cache是共享的),严重的Cache访问冲突会严重的降低线程执行效率。如果是计算密集型的运算,运行4个的时候,肯定会比运行一个慢了啊,因为其他一些进程总还是需要一些处理器时间的。
如果楼主要体验加速比的话,应该在一个程序中启动多个线程。而不是启动4个进程看加速比。
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
abc推荐给好友