如何提高四核的效率

lvsonga 2008-07-07 01: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之间减少了数据传送,就可以提高效率了。
...全文
698 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dydlynudt 2008-11-12
  • 打赏
  • 举报
回复
要纠正楼主的几句话:
问题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个进程看加速比。
cdef9108 2008-10-29
  • 打赏
  • 举报
回复
操作系统应该有亲缘性,就是尽量同一个线程会分配给上次运行它的cpu里进行执行。
「已注销」 2008-10-25
  • 打赏
  • 举报
回复
兄弟,在进程管理器里,对你执行的每一个进程,可以选择"关系设置",设置允许执行该进程的CPU,你可以自行设置CPU和你各个工程的关联关系,然后重新测试,看看有没有改进
huyongzs 2008-07-17
  • 打赏
  • 举报
回复
另外一个进程的任务被分配也和一定的分配算法有关系。该算法一般在不同的情况提高效率的效果不一样。可能同时执行四个进程反倒充分利用了计算机的硬件效率更好。这个要结合程序的特点来看。
huyongzs 2008-07-17
  • 打赏
  • 举报
回复
效率下降的原因不是CPU之间的传输,而是一个操作系统的调度算法的问题。也和实际中程序的运行环境(周围的程序和运行硬件,以及这个程序本身的运行特点比如IO密集度)相关。
在现在系统中程序并非是像dos等单任务单用户系统一样直接占用CPU,而是采取时间分片的原则。每个进程按照一定的算法轮流运行固定的时间长度。在什么时候执行一个进程,什么时候暂停一个进程根据算法有不同的条件判断(一般都是“高明”但是简洁的)。
另外其实现代的操作系统一般都支持多核,比如windowsNT系列和linux,unix,要把过去单核运行的程序改成多核其实不是想象的那样子大动干戈,还是相对很好扩展的。甚至于他们在我们只用单核的年代就已经扩展出来了多核运行的能力只不过我们没有用到没注意到。
我所以我的意思是:
效率下降的主要原因其实不是CPU之间的交换而是和多进程多核运行的环境下边的问题包括你的硬件,当时的系统运行的其他程序。相关的操作(比如是否乱点鼠标,或者像网络设备一样的不可预测的任务制造者繁忙都有关系),程序本身特点比如是否IO密集或者CPU密集。
调度算法不同自然效率也就不一样。一个CPU一个进程(其实多任务操作系统不能完全做到,总是要分出时间做其他的事情)未必就比4个CPU效率更好。
aero_boy 2008-07-09
  • 打赏
  • 举报
回复
多核能不能提高效率,要看具体的你的程序的执行流程和各个进程对数据的依赖情况.
lvsonga 2008-07-09
  • 打赏
  • 举报
回复
请给个不匮乏的解释
huyongzs 2008-07-09
  • 打赏
  • 举报
回复
这个就属于是对于操作系统理论知识的匮乏。说明楼主顶多只是会一些编程语法。对于高级编程知识知道少。
lvsonga 2008-07-09
  • 打赏
  • 举报
回复
我发现任务管理器中点进程右键选关系设置,里面可以将该进程固定在某几个CPU,非常方便,不用再学什么语言了,不过试了之后发现效率并没有提高,费思量...

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧