免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5530 | 回复: 7
打印 上一主题 下一主题

[请教/讨论一下]单核/多核CPU对于这几种程序的性能如何影响? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-30 11:40 |只看该作者 |倒序浏览
10可用积分
我对于多核cpu对于计算机性能的影响始终很模糊,例如:

1.原先在单cpu的机器上,比如说我运行一个读写磁盘的程序,例如大的图片处理程序,读入一个大图片需要很长时间,在等待图像载入的过程中,CPU几乎就是100%在等待,其他的程序,例如一个计算程序,就无法响应界面的点击,也无法运行,因为cpu已经被占用了。
   我想知道,在单cpu的情况下,读写磁盘的过程为什么会导致界面没有响应? 另外的程序没有对磁盘有操作啊!

2. 然后有人告诉我(1)那是因为cpu在中断,等待读写磁盘的进程去结束。我现在的机器是intel双核的机器了,运行(1)的情况仍然不变,难道2个cpu内核都在等待结束? 一个等待i/o就够了吧,另外一个是不是可以响应我的其他计算需求(不读写磁盘)呢?

3. 如果我写一个main程序
main(){
f1();
f2();
}
其中f1和f2无关,各自做一件不同的事情
在双核的机器上运行,假设时间是t
然后我改写这个程序,f1和f2分别用一个独立的线程来启动,那么main运行的时间是不是几乎就能减少一半? 如果不能减少一半的话那么双核的意义又是什么? 一个工作的时候一个休息?

4. 到目前为止,偶还真的没有体会到多核cpu给我的桌面带来的变化,运行大型程序,鼠标变成漏斗的时候,感觉还是像单核cpu一样要让我等待很久不没有响应就像程序死掉一样。

5. 是不是无论何时系统都会把多个cpu同时用上? 感觉不是多线程的情况下这样没有意义啊,因为程序要按顺序执行,cpu1去执行f1()的时候,cpu2再等待,等待结束以后再运行f2()。那么这和单cpu的情况相比性能岂不是一样。我们写大部分的应用程序没有去用多线程,那么多核cpu对于计算性能的提高有什么意义呢?

心中的迷雾,思考得不到答案。还请各位大虾指教!!!!!!

最佳答案

查看完整内容

>>(1)多核在编译的时候,是不是可能一个cpu运行一个gcc? 这个是操作系统的功能吗? 还是make的功能? 貌似linux上面的irqbalance这个daemon是做cpu负载平衡的。Windows上面能体现出来编译加快吗?gnu 的 make 有一个 -j 参数,可以把编译任务并行化,-j 后面可以跟一个整数表示同时执行的任务个数。如果是多 cpu 或多核,make 会自动把任务分配到不同的 cpu 或核上去。windows 上的不清楚,但没理由不支持的。>> (2)如果两个cpu都在工 ...

论坛徽章:
0
2 [报告]
发表于 2008-09-30 11:40 |只看该作者
>>(1)多核在编译的时候,是不是可能一个cpu运行一个gcc? 这个是操作系统的功能吗? 还是make的功能? 貌似linux上面的irqbalance这个daemon是做cpu负载平衡的。Windows上面能体现出来编译加快吗?

gnu 的 make 有一个 -j 参数,可以把编译任务并行化,-j 后面可以跟一个整数表示同时执行的任务个数。如果是多 cpu 或多核,make 会自动把任务分配到不同的 cpu 或核上去。

windows 上的不清楚,但没理由不支持的。


>> (2)如果两个cpu都在工作,第1一个cpu在编译生成一个.o文件,第2个cpu在等待ld生成最后结果,那么
第二个cpu怎么知道我现在应该等待第1个cpu完成工作才能继续? cpu只是接收一些汇编指令啊,它不能理解什么意义。那么我说得这个协调工作由谁完成呢? OS内核? irqbalance? 还是cpu有这种操作系统一样的智能?(不太可能吧)

make 会处理。

论坛徽章:
0
3 [报告]
发表于 2008-09-30 12:03 |只看该作者
多核可以实现程序的真正并行执行,怎么会没意义呢。对于同一个程序而言(比如你的3中示例程序),使用多线程就可以实现同一应用程序内部的并行执行(比如你的f1和f2分别在不同的线程中并行执行)。想多核发挥威力,还得应用程序支持才行。

论坛徽章:
0
4 [报告]
发表于 2008-09-30 13:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2008-09-30 13:32 |只看该作者
原帖由 jamesr 于 2008-9-30 13:06 发表
用多核编译时比较爽。
多进程也可以放到不同的核中运行,不一定非得线程级并行编程。


请问
(1)多核在编译的时候,是不是可能一个cpu运行一个gcc? 这个是操作系统的功能吗? 还是make的功能? 貌似linux上面的irqbalance这个daemon是做cpu负载平衡的。Windows上面能体现出来编译加快吗?
(2)如果两个cpu都在工作,第1一个cpu在编译生成一个.o文件,第2个cpu在等待ld生成最后结果,那么
第二个cpu怎么知道我现在应该等待第1个cpu完成工作才能继续? cpu只是接收一些汇编指令啊,它不能理解什么意义。那么我说得这个协调工作由谁完成呢? OS内核? irqbalance? 还是cpu有这种操作系统一样的智能?(不太可能吧)

请继续指教,xie!

论坛徽章:
0
6 [报告]
发表于 2008-09-30 13:52 |只看该作者
原帖由 win_hate 于 2008-9-30 13:45 发表
>>(1)多核在编译的时候,是不是可能一个cpu运行一个gcc? 这个是操作系统的功能吗? 还是make的功能? 貌似linux上面的irqbalance这个daemon是做cpu负载平衡的。Windows上面能体现出来编译加快吗?

gnu 的 make  ...


看起来多核的功能不是cpu自动完成的,而是需要每个程序去各自支持。

学习了,分送上!

论坛徽章:
0
7 [报告]
发表于 2008-09-30 15:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2008-10-01 10:35 |只看该作者
多核(或多CPU)并不是用来提高访问外存效率的。
要提高外存访问效率,该在总线与外存之间去解决。譬如:设备中断、DMA、通道、智能I/O等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP