免费注册 查看新帖 |

Chinaunix

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

双核CPU是怎么工作的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-07 10:32 |只看该作者 |倒序浏览
hi,all,我们公司从单核换成了双核,我搞不明白原理,不清楚在实际编程时需要注意些什么,内核是linux3.0
我想知道从取指译码访存执行写回这方面双核CPU是怎么相互工作的,看到说市面上有2种INTEL和AMD的,随便哪种都行。或者其实如果能解释ARM的最好。
或者如果能从单CPU中不会调度的一段代码来说,双核在运行过程中是什么时候切换?一段代码在双核里怎么分配来执行?
能否简单讲解一下,或者提供详细描述文档的链接?或者哪个CPU手册会详细讲解到?
谢谢大家

还有一个疑问,如果单CPU不带cache的话,每次都要访存,那么RAM的速度比CPU慢很多,多CPU不是也没有用吗,如果每个CPU都带cache,那么2个cache怎么同步?

论坛徽章:
0
2 [报告]
发表于 2012-05-07 12:46 |只看该作者
个人理解:
某一个特定线程代码通常不会在多个核之间switch,因为这样的代价很高。

论坛徽章:
0
3 [报告]
发表于 2012-05-07 20:31 |只看该作者
回复 2# garyv
   
问了同事,更新一下
同事A说:该CPU双核ARM A9共用一个cache,在线程调度时做CPU切换,并没有特殊指令做切换,在什么命令附带下切换也不知道。代码也不能绑定到一个CPU上指令。用spin_lock可解决多CPU问题,否则出现中断就会让代码中(读寄存器->改值->写寄存器)这类顺序打断并写错值。或关中断。
同事B说:可以绑定,还说负载均衡是CPU自己做的。
但是大家都没文档,回答起来也不觉得有什么依据。
如果一个CPU执行一条线程,那另一个CPU不是白费了,越久切换不是越浪费吗。这和单核有什么差别?如果不考虑流水线,一时也只有一个CPU在执行
说icache和CPU速度差不多,那么每次取指都要访问icache,即使CPU0,1执行指令是1,3,5,2,4,6这样交叉,都受cache速度影响,另一个CPU也是浪费了。

论坛徽章:
0
4 [报告]
发表于 2012-05-11 16:13 |只看该作者
ARM多核?!?!如果是V6的还是先洗洗睡吧。最好找个更新一些的CPU,多核技术更成熟一些。否则,够你们折腾的。

论坛徽章:
0
5 [报告]
发表于 2012-06-02 10:24 |只看该作者
应该是每个CPU都有自己的cache,关于cache之间同步的问题貌似有很多策略,写时更新就是你写自己的cache,可能要把改动写到主存或者发送什么通知另外的cpu-cache你做了改动(可能会导致数据竞争?)。多核对于单线程的程序貌似没什么太大影响,只有多线程程序在并行的程序段才能发挥作用

记不清在哪看到过,还有自己意断的

论坛徽章:
0
6 [报告]
发表于 2012-06-04 12:20 |只看该作者
多核CACHE之间的同步机制,INTEL/AMD各自实现方式不同,好像INTEL基于MOSI模型

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2012-06-16 21:18 |只看该作者
系统初试化的时候通常是只有一个核,建立了多任务环境后才使能其他核心并行工作。

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
8 [报告]
发表于 2012-07-10 12:49 |只看该作者
还有一个疑问,如果单CPU不带cache的话,每次都要访存,那么RAM的速度比CPU慢很多,多CPU不是也没有用吗,如果每个CPU都带cache,那么2个cache怎么同步?

实际注意的,如果是应用程序,单任务,没什么注意的,多任务就要有一些保护,大多数可能已经加了信号量,不过仍然可能存在一些共享变量操作在并发的时候出问题的概率小,而并行的时候出现概率大。

取指译码访存执行写回这方面双核CPU根本不会相互工作,各自干各自的。如果不是深度优化,用信号量保护临界资源,完事OK。

一段代码不会再双核里面分配执行,双核只是线程级并行,你开多线程才能用到多核的优势,你就一个线程,吭哧吭哧在那搞,跟单核基本一样,甚至性能更差。

CPU都带cache,多核之间cache需要通过cache coherency机制保证各个核之间数据的coherency。不过乱序的处理器,让然需要手工处理consistency。

同事A说:该CPU双核ARM A9共用一个cache,在线程调度时做CPU切换,并没有特殊指令做切换,在什么命令附带下切换也不知道。代码也不能绑定到一个CPU上指令。用spin_lock可解决多CPU问题,否则出现中断就会让代码中(读寄存器->改值->写寄存器)这类顺序打断并写错值。或关中断。
--一般来说L1 cache都是私有的,LLC都是共享的。线程调度跟单核没什么区别。代码与CPU的捆绑没关系,应该说是线程可以捆绑CPU,这是操作系统可以提供的。spin和信号量都可以同步,信号量是阻塞等,spin是忙等。多核里面关中断也不一定是安全的,大多数只能关本核中断。顺序打乱是需要consistency保证的,单核也有这个问题。
同事B说:可以绑定,还说负载均衡是CPU自己做的。
--可以绑定线程,但负载均衡不懂是什么意思。
如果一个CPU执行一条线程,那另一个CPU不是白费了,越久切换不是越浪费吗。这和单核有什么差别?如果不考虑流水线,一时也只有一个CPU在执行
说icache和CPU速度差不多,那么每次取指都要访问icache,即使CPU0,1执行指令是1,3,5,2,4,6这样交叉,都受cache速度影响,另一个CPU也是浪费了。
--多核是线程级并行技术,并非指令级并行技术。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2012-07-13 09:26 |只看该作者
记不清在哪看到过了。

论坛徽章:
0
10 [报告]
发表于 2012-08-24 13:39 |只看该作者
双核一样的工作啊。就是有两个一起分担工作











































New era snapbacks
Cheap snapbacks
Snapbacks for cheap
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP