多核CPU和單核的區(qū)別
時(shí)間:2021-10-29 16:56:06
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]昨天有同學(xué)問(wèn)我多核cpu和單核的區(qū)別大不大,今天簡(jiǎn)單寫一篇回復(fù)下吧。大家有其他問(wèn)題也可以文末給我留言,我會(huì)盡量抽時(shí)間寫文回復(fù)。首先回顧下基本概念,cpu,就是中央處理器,包括運(yùn)算器和控制器。cpu的主要功能就是“一行一行的執(zhí)行代碼”。所以大家可以把cpu看成是醫(yī)院的醫(yī)生診室,在一...
昨天有同學(xué)問(wèn)我多核cpu和單核的區(qū)別大不大,今天簡(jiǎn)單寫一篇回復(fù)下吧。大家有其他問(wèn)題也可以文末給我留言,我會(huì)盡量抽時(shí)間寫文回復(fù)。
首先回顧下基本概念,cpu,就是中央處理器,包括運(yùn)算器和控制器。cpu的主要功能就是“一行一行的執(zhí)行代碼”。所以大家可以把cpu看成是醫(yī)院的醫(yī)生診室,在一定時(shí)間內(nèi)執(zhí)行一行代碼(給一個(gè)病人診斷治療)。
所以單核cpu就是,代碼經(jīng)過(guò)前面一系列的前導(dǎo)操作(類似于醫(yī)院掛號(hào)),然后到cpu處執(zhí)行時(shí)發(fā)現(xiàn),就只有一個(gè)cpu,大家排隊(duì)執(zhí)行。(類似于10個(gè)掛號(hào)窗口掛號(hào),結(jié)果跑到醫(yī)生那只有一個(gè)醫(yī)生,只能排隊(duì)等)。
這時(shí)候想要提升系統(tǒng)性能,只有兩個(gè)辦法,要么提升cpu性能(讓醫(yī)生看病快點(diǎn)),要么多加幾個(gè)cpu(多整幾個(gè)醫(yī)生)。
多年前英特爾奔騰年代不斷提升主頻,就是提升cpu性能的思路。那個(gè)時(shí)候正是我讀大學(xué)的時(shí)候,配電腦就是分析主頻,秀操作就是超頻。還有人搞什么液氮冷卻超頻……
后來(lái)主頻實(shí)在玩不下去了,因?yàn)殡S著主頻提升對(duì)工藝要求,EMI/EMC要求,發(fā)熱量等要求太高,扛不住了,所以不得不轉(zhuǎn)換思路,開始研究多核這條路了(一個(gè)醫(yī)生已經(jīng)007了,實(shí)在受不了了,不得不多配幾個(gè)醫(yī)生了)。
于是乎整起了多核心,多個(gè)cpu同步運(yùn)行指令,這速度就起來(lái)了。多核還有兩種不同思路,一種叫對(duì)稱多核心,就是多個(gè)核心是完全相同的,譬如4核cortex-a53,這樣的4個(gè)核心都是同一種內(nèi)核a53,這種術(shù)語(yǔ)叫SMP。還有另一種就是多個(gè)核心不一樣,譬如stm32mp157,內(nèi)置2個(gè)cortex-a7,1個(gè)cortex-m4核心,所以它內(nèi)部是有a7和m4兩種不同類型的核心的,這種術(shù)語(yǔ)叫AMP。
一般經(jīng)常說(shuō)到的多核問(wèn)題都是SMP的多核問(wèn)題,amp這種析構(gòu)多核大多數(shù)人還不太接觸。我們今天主要是想說(shuō)說(shuō)smp。我從以下幾個(gè)問(wèn)題角度來(lái)講一下。
1 多核的效率是單核的倍數(shù)嗎?
譬如4核A53的cpu,性能是單核A53的4倍嗎?理論上是,但是實(shí)際不可能,至少有兩方面的損耗。
一個(gè)是多個(gè)核心的其他共用資源限制。譬如內(nèi)存,你換了4核cpu難道內(nèi)存也會(huì)加4倍嗎?譬如cache,4核cpu的cache也是4倍設(shè)計(jì)嗎?譬如寄存器,每個(gè)內(nèi)核的寄存器都是獨(dú)立的單核倍數(shù)設(shè)計(jì)嗎?這就好像醫(yī)院一樣,1個(gè)醫(yī)生換4個(gè)醫(yī)生,但是做B超檢查的還是一臺(tái)機(jī)器,性能瓶頸就從醫(yī)生轉(zhuǎn)到B超檢查了,不可能性能提升4倍的。
另一個(gè)是多核cpu之間的協(xié)調(diào)管理?yè)p耗。譬如你有4個(gè)任務(wù)要執(zhí)行,怎么評(píng)論分配給多個(gè)cpu核心,避免那種“旱的旱死,澇的澇死”的情況,這就是所謂負(fù)載均衡的問(wèn)題,在支持多核的os調(diào)度器設(shè)計(jì)時(shí)要考慮的。譬如多個(gè)核心同時(shí)運(yùn)行兩個(gè)相關(guān)的任務(wù),需要考慮任務(wù)同步的,這也需要消耗額外性能。
這就好像公司工作一樣,一個(gè)人的時(shí)候至少不用開會(huì)浪費(fèi)時(shí)間,自己跟自己商量就行了。兩個(gè)人就要開會(huì)同步工作,協(xié)調(diào)分配,所以工作效率絕對(duì)不可能達(dá)到2倍。要是幾千幾萬(wàn)人呢?那一天工作8小時(shí)有6小時(shí)在開會(huì),干活時(shí)間只有30%不到了。
但是多核心宏觀上總是提升了系統(tǒng)總體性能的,這就好像公司,團(tuán)隊(duì)人多了對(duì)外輸出能力總是更強(qiáng)的(管理不失水準(zhǔn)情況下)。所以SMP是目前提升系統(tǒng)性能的一種主流思路。
2 多核在編程上有區(qū)別嗎?
如果你是做操作系統(tǒng)底層開發(fā)移植,那么多核和單核是有區(qū)別的,這個(gè)大家不妨去看看一些SMP SOC的Linux kernel源碼就知道了,在我們經(jīng)常分析的head.S中就有不少處理smp相關(guān)的代碼。
但是如果你是做應(yīng)用層開發(fā),那對(duì)你來(lái)說(shuō)區(qū)別很小了。
現(xiàn)在崇尚大家用多線程編程,也是因?yàn)镾MP的硬件成為主流了,編程時(shí)把工作分開到多個(gè)線程中,這樣調(diào)度器就可以將他們同時(shí)調(diào)度到多個(gè)cpu去運(yùn)行,就可以提升系統(tǒng)性能,讓你感覺(jué)到軟件運(yùn)行速度更快了。所以多線程編程要注意同步和臨界區(qū)問(wèn)題等,也都是并行運(yùn)行帶來(lái)的。
首先回顧下基本概念,cpu,就是中央處理器,包括運(yùn)算器和控制器。cpu的主要功能就是“一行一行的執(zhí)行代碼”。所以大家可以把cpu看成是醫(yī)院的醫(yī)生診室,在一定時(shí)間內(nèi)執(zhí)行一行代碼(給一個(gè)病人診斷治療)。
所以單核cpu就是,代碼經(jīng)過(guò)前面一系列的前導(dǎo)操作(類似于醫(yī)院掛號(hào)),然后到cpu處執(zhí)行時(shí)發(fā)現(xiàn),就只有一個(gè)cpu,大家排隊(duì)執(zhí)行。(類似于10個(gè)掛號(hào)窗口掛號(hào),結(jié)果跑到醫(yī)生那只有一個(gè)醫(yī)生,只能排隊(duì)等)。
這時(shí)候想要提升系統(tǒng)性能,只有兩個(gè)辦法,要么提升cpu性能(讓醫(yī)生看病快點(diǎn)),要么多加幾個(gè)cpu(多整幾個(gè)醫(yī)生)。
多年前英特爾奔騰年代不斷提升主頻,就是提升cpu性能的思路。那個(gè)時(shí)候正是我讀大學(xué)的時(shí)候,配電腦就是分析主頻,秀操作就是超頻。還有人搞什么液氮冷卻超頻……
后來(lái)主頻實(shí)在玩不下去了,因?yàn)殡S著主頻提升對(duì)工藝要求,EMI/EMC要求,發(fā)熱量等要求太高,扛不住了,所以不得不轉(zhuǎn)換思路,開始研究多核這條路了(一個(gè)醫(yī)生已經(jīng)007了,實(shí)在受不了了,不得不多配幾個(gè)醫(yī)生了)。
于是乎整起了多核心,多個(gè)cpu同步運(yùn)行指令,這速度就起來(lái)了。多核還有兩種不同思路,一種叫對(duì)稱多核心,就是多個(gè)核心是完全相同的,譬如4核cortex-a53,這樣的4個(gè)核心都是同一種內(nèi)核a53,這種術(shù)語(yǔ)叫SMP。還有另一種就是多個(gè)核心不一樣,譬如stm32mp157,內(nèi)置2個(gè)cortex-a7,1個(gè)cortex-m4核心,所以它內(nèi)部是有a7和m4兩種不同類型的核心的,這種術(shù)語(yǔ)叫AMP。
一般經(jīng)常說(shuō)到的多核問(wèn)題都是SMP的多核問(wèn)題,amp這種析構(gòu)多核大多數(shù)人還不太接觸。我們今天主要是想說(shuō)說(shuō)smp。我從以下幾個(gè)問(wèn)題角度來(lái)講一下。
1 多核的效率是單核的倍數(shù)嗎?
譬如4核A53的cpu,性能是單核A53的4倍嗎?理論上是,但是實(shí)際不可能,至少有兩方面的損耗。
一個(gè)是多個(gè)核心的其他共用資源限制。譬如內(nèi)存,你換了4核cpu難道內(nèi)存也會(huì)加4倍嗎?譬如cache,4核cpu的cache也是4倍設(shè)計(jì)嗎?譬如寄存器,每個(gè)內(nèi)核的寄存器都是獨(dú)立的單核倍數(shù)設(shè)計(jì)嗎?這就好像醫(yī)院一樣,1個(gè)醫(yī)生換4個(gè)醫(yī)生,但是做B超檢查的還是一臺(tái)機(jī)器,性能瓶頸就從醫(yī)生轉(zhuǎn)到B超檢查了,不可能性能提升4倍的。
另一個(gè)是多核cpu之間的協(xié)調(diào)管理?yè)p耗。譬如你有4個(gè)任務(wù)要執(zhí)行,怎么評(píng)論分配給多個(gè)cpu核心,避免那種“旱的旱死,澇的澇死”的情況,這就是所謂負(fù)載均衡的問(wèn)題,在支持多核的os調(diào)度器設(shè)計(jì)時(shí)要考慮的。譬如多個(gè)核心同時(shí)運(yùn)行兩個(gè)相關(guān)的任務(wù),需要考慮任務(wù)同步的,這也需要消耗額外性能。
這就好像公司工作一樣,一個(gè)人的時(shí)候至少不用開會(huì)浪費(fèi)時(shí)間,自己跟自己商量就行了。兩個(gè)人就要開會(huì)同步工作,協(xié)調(diào)分配,所以工作效率絕對(duì)不可能達(dá)到2倍。要是幾千幾萬(wàn)人呢?那一天工作8小時(shí)有6小時(shí)在開會(huì),干活時(shí)間只有30%不到了。
但是多核心宏觀上總是提升了系統(tǒng)總體性能的,這就好像公司,團(tuán)隊(duì)人多了對(duì)外輸出能力總是更強(qiáng)的(管理不失水準(zhǔn)情況下)。所以SMP是目前提升系統(tǒng)性能的一種主流思路。
2 多核在編程上有區(qū)別嗎?
如果你是做操作系統(tǒng)底層開發(fā)移植,那么多核和單核是有區(qū)別的,這個(gè)大家不妨去看看一些SMP SOC的Linux kernel源碼就知道了,在我們經(jīng)常分析的head.S中就有不少處理smp相關(guān)的代碼。
但是如果你是做應(yīng)用層開發(fā),那對(duì)你來(lái)說(shuō)區(qū)別很小了。
現(xiàn)在崇尚大家用多線程編程,也是因?yàn)镾MP的硬件成為主流了,編程時(shí)把工作分開到多個(gè)線程中,這樣調(diào)度器就可以將他們同時(shí)調(diào)度到多個(gè)cpu去運(yùn)行,就可以提升系統(tǒng)性能,讓你感覺(jué)到軟件運(yùn)行速度更快了。所以多線程編程要注意同步和臨界區(qū)問(wèn)題等,也都是并行運(yùn)行帶來(lái)的。