fei1700 发表于 2012-05-07 10:32

双核CPU是怎么工作的?

hi,all,我们公司从单核换成了双核,我搞不明白原理,不清楚在实际编程时需要注意些什么,内核是linux3.0
我想知道从取指译码访存执行写回这方面双核CPU是怎么相互工作的,看到说市面上有2种INTEL和AMD的,随便哪种都行。或者其实如果能解释ARM的最好。
或者如果能从单CPU中不会调度的一段代码来说,双核在运行过程中是什么时候切换?一段代码在双核里怎么分配来执行?
能否简单讲解一下,或者提供详细描述文档的链接?或者哪个CPU手册会详细讲解到?
谢谢大家

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

garyv 发表于 2012-05-07 12:46

个人理解:
某一个特定线程代码通常不会在多个核之间switch,因为这样的代价很高。

fei1700 发表于 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也是浪费了。

灌水菜鸟 发表于 2012-05-11 16:13

ARM多核?!?!如果是V6的还是先洗洗睡吧。最好找个更新一些的CPU,多核技术更成熟一些。否则,够你们折腾的。

kain_xiami 发表于 2012-06-02 10:24

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

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

garyv 发表于 2012-06-04 12:20

多核CACHE之间的同步机制,INTEL/AMD各自实现方式不同,好像INTEL基于MOSI模型

smalloc 发表于 2012-06-16 21:18

系统初试化的时候通常是只有一个核,建立了多任务环境后才使能其他核心并行工作。

liuiang 发表于 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也是浪费了。
--多核是线程级并行技术,并非指令级并行技术。

pitonas 发表于 2012-07-13 09:26

记不清在哪看到过了。:((

kyookyo 发表于 2012-08-24 13:39

双核一样的工作啊。就是有两个一起分担工作











































New era snapbacks
Cheap snapbacks
Snapbacks for cheap
页: [1]
查看完整版本: 双核CPU是怎么工作的?