自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

因?yàn)橐粋€(gè)循環(huán),CPU搞了個(gè)新技術(shù)!

系統(tǒng)
我所在的一號(hào)車間,除了負(fù)責(zé)執(zhí)行指令的我,還有負(fù)責(zé)讀取指令的小A,負(fù)責(zé)指令譯碼的小胖和負(fù)責(zé)結(jié)果回寫的老K,我們幾個(gè)各司其職,一起完成執(zhí)行程序的工作。

好久不見(jiàn),我叫阿Q,是CPU一號(hào)車間的員工。我所在的CPU有8個(gè)車間,也就是8個(gè)核心,咱們每個(gè)核心都可以同時(shí)執(zhí)行兩個(gè)線程,就是8核16線程,那速度杠杠滴。

我所在的一號(hào)車間,除了負(fù)責(zé)執(zhí)行指令的我,還有負(fù)責(zé)讀取指令的小A,負(fù)責(zé)指令譯碼的小胖和負(fù)責(zé)結(jié)果回寫的老K,我們幾個(gè)各司其職,一起完成執(zhí)行程序的工作。

一個(gè)簡(jiǎn)單的循環(huán)

那天,我們遇到了一段代碼:

void array_add(int data[], int len) {
for (int i = 0; i < len; i++) {
data[i] += 1;
}
}

循環(huán)了好幾百次之后,才把這段代碼執(zhí)行完成,每次循環(huán)都是做簡(jiǎn)單又重復(fù)的工作,把我累得夠嗆。

一旁負(fù)責(zé)結(jié)果回寫的老K也是累的滿頭大汗,吐槽道:“每次都是取出來(lái)加1又寫回去,要是能一次多取幾個(gè)數(shù),批量處理就好了”

老K的話讓我眼前一亮,對(duì)啊,能不能批量操作呢?

心里一邊想著,一邊繼續(xù)干活了。

繁忙的一天很快結(jié)束了,轉(zhuǎn)眼又到了晚上,計(jì)算機(jī)關(guān)機(jī)后,我把大家召集了起來(lái)。

“兄弟們,還記得咱們白天遇到的那個(gè)循環(huán)嗎?”

“你說(shuō)哪個(gè)循環(huán),咱們這一天可執(zhí)行了不少循環(huán)呢”,小A說(shuō)到。

“就是那個(gè)把整數(shù)數(shù)組每個(gè)元素都加1的那個(gè)循環(huán)”

“我想起來(lái)了,那循環(huán)怎么了?有什么問(wèn)題嗎?”

我看了老K一眼,說(shuō)道:“我在想今天老K的話,像這種循環(huán),每次都是取出來(lái)加1又寫回去,一次操作一個(gè)數(shù),效率太低了,咱們要是升級(jí)改造一下,支持一次取出多個(gè)數(shù),批量加1,這樣豈不是快很多?”

老K一聽(tīng)來(lái)了興趣,“這敢情好,你打算怎么做?”

“這我還沒(méi)想好,大家有什么建議嗎?”

一旁負(fù)責(zé)指令譯碼的小胖說(shuō)道:“可以新增一條指令,專門用來(lái)一次取出多個(gè)數(shù)據(jù)來(lái)加1”

“不行不行,不能限的這么死,今天是加1,萬(wàn)一下次是加2呢?指令里面不能限制為1”

“那如果每個(gè)數(shù)據(jù)要加的是不一樣的怎么辦?”

“你這么一說(shuō),那萬(wàn)一不是加法,是減法,乘法怎么辦?”

“還有啊,···”

大家開(kāi)始七嘴八舌討論了起來(lái),沒(méi)想到一個(gè)小小的加法循環(huán),一下子引出了這么多問(wèn)題來(lái),這是我們沒(méi)想到的。

并行計(jì)算

隨著討論的深入,我覺(jué)得已經(jīng)超出了咱們一號(hào)車間能把控的范圍,需要上報(bào)給領(lǐng)導(dǎo),組織八個(gè)車間代表一起來(lái)商討。

領(lǐng)導(dǎo)一聽(tīng)說(shuō)有提高性能的新技術(shù),馬上來(lái)了興趣,很快便開(kāi)會(huì)組織大家一起來(lái)商討方案。

“都到齊了是吧,阿Q你給大家說(shuō)一下這個(gè)會(huì)議的目的”,領(lǐng)導(dǎo)說(shuō)到。

我站了起來(lái),開(kāi)始把我們遇到的問(wèn)題和想法跟大家講了一遍。

“是這樣的,我們一號(hào)車間那天遇到了一段循環(huán)代碼,循環(huán)體的內(nèi)容很簡(jiǎn)單,就是給數(shù)組中的每一個(gè)元素加1。我們執(zhí)行的時(shí)候,就是不斷取出每一個(gè)元素,然后將其執(zhí)行加法計(jì)算后,再寫回去。這樣一個(gè)一個(gè)來(lái)加1,我們感覺(jué)太慢了, 要是可以一次多取幾個(gè),并行加1,那一定比一個(gè)一個(gè)加快上不少?!?/p>

我剛說(shuō)完,大家都開(kāi)始小聲議論起來(lái)。

“我看出來(lái)了,這其實(shí)就是并行計(jì)算!”,二號(hào)車間小虎一語(yǔ)道出了關(guān)鍵。

六號(hào)車間小六問(wèn)道:”阿Q,你們已經(jīng)有方案了嗎?“

“還沒(méi)有,這正是今天開(kāi)會(huì)的目的,因?yàn)榍闆r有點(diǎn)復(fù)雜,還需要大家一起來(lái)出出主意”

“好像并不復(fù)雜嘛”

“我上面舉的例子只是一個(gè)簡(jiǎn)單的情況,并行計(jì)算還可能不是固定的數(shù),可能是一個(gè)數(shù)組和另一個(gè)數(shù)組相加。還有可能不是整數(shù)相加,而是浮點(diǎn)數(shù),甚至,還可能不是加法,而是減法或者乘法,再或者不是算術(shù)運(yùn)算,而是邏輯運(yùn)算”

我剛一說(shuō)完,大家又開(kāi)始竊竊私語(yǔ)交流起來(lái)。

“我琢磨著你說(shuō)的這一系列東西,咱們是要新增一套專門用來(lái)并行計(jì)算的指令集啊”,小虎說(shuō)道。

“這可是大工程啊”

“是啊···”

這時(shí),小六又問(wèn)道:“咱們的計(jì)算的時(shí)候,都是把數(shù)據(jù)讀取到寄存器進(jìn)行的,可這寄存器一次只能裝一個(gè)數(shù),怎么一次讀取多個(gè)數(shù)據(jù)呢?”

“可能需要新增一些容量大一些的寄存器,比如128bit長(zhǎng)度,可以同時(shí)容納4個(gè)32位的整數(shù)”

“有這個(gè)必要嗎?咱們是通用CPU,又不是專門做數(shù)學(xué)計(jì)算的芯片,搞這些東西干嘛?”,四號(hào)車間代表提出了質(zhì)疑。

我也不甘示弱:“那可太有必要了,在圖像、視頻、音頻處理等領(lǐng)域,有大量這樣的計(jì)算需求,咱們得提升處理這些數(shù)據(jù)的能力”

見(jiàn)我們爭(zhēng)執(zhí)不下,領(lǐng)導(dǎo)拍了拍桌子,會(huì)場(chǎng)一下安靜了下來(lái)。

“我覺(jué)得阿Q說(shuō)的有道理,咱們確實(shí)需要提升處理這類數(shù)據(jù)運(yùn)算的能力了。不過(guò)不用一下搞那么復(fù)雜,先支持整數(shù)并行運(yùn)算就行了。新增寄存器這個(gè)也不用著急,可以先借用一下浮點(diǎn)數(shù)運(yùn)算單元FPU的寄存器。這件事先這么定下來(lái),具體的方案你們?cè)倮^續(xù)討論。”,說(shuō)完便離開(kāi)了會(huì)議室。

領(lǐng)導(dǎo)不愧是領(lǐng)導(dǎo),幾句話就把我們安排的明明白白。

SIMD

又經(jīng)過(guò)一陣緊張的討論,我們終于敲定了方案。

我們借用浮點(diǎn)數(shù)運(yùn)算單元的寄存器,還給它們起了新的名字:MM0-MM7。因?yàn)槭?4位的寄存器,所以可以同時(shí)存儲(chǔ)兩個(gè)32位的整數(shù)或者4個(gè)16位整數(shù)或者8個(gè)8位的整數(shù)。

我們還新增了一套叫MMX的指令集,用來(lái)并行執(zhí)行整數(shù)的運(yùn)算。

我們把這種在一條指令中同時(shí)處理多個(gè)數(shù)據(jù)的技術(shù)叫做單指令多數(shù)據(jù)流(Single Instruction Multiple Data),簡(jiǎn)稱SIMD。

有了這套指令集,咱們處理這類整數(shù)運(yùn)算問(wèn)題的速度快了不少。

不過(guò)漸漸地發(fā)現(xiàn)了兩個(gè)很麻煩的問(wèn)題:

  • 第一個(gè)問(wèn)題,因?yàn)槭墙栌肍PU的寄存器,所以當(dāng)執(zhí)行SIMD指令的時(shí)候,就不能用FPU計(jì)算單元,反過(guò)來(lái)也一樣,同時(shí)使用的話就會(huì)出亂子,所以要經(jīng)常在不同的模式之間切換,實(shí)在是有些麻煩。
  • 另一個(gè)更重要的問(wèn)題,咱們這套指令集只能處理整數(shù)的并行運(yùn)算,可現(xiàn)在浮點(diǎn)數(shù)的并行運(yùn)算越來(lái)越多,尤其是圖像、視頻還有深度學(xué)習(xí)的一些數(shù)據(jù)處理,浮點(diǎn)數(shù)情況越來(lái)越多,這時(shí)候都派不上用場(chǎng)。

我們把這些問(wèn)題給領(lǐng)導(dǎo)做了匯報(bào),看到我們已經(jīng)做出的成績(jī),領(lǐng)導(dǎo)終于同意繼續(xù)升級(jí)。

這一次,我們擴(kuò)展了一套新的SSE指令集出來(lái),新增了XMM0-XMM7總共8個(gè)128位的寄存器,再也不用跟FPU共享寄存器了。而且位寬加了一倍,能容納的數(shù)據(jù)更多了,能同時(shí)處理的數(shù)據(jù)自然也變多了。

后來(lái),我們又不斷的修改升級(jí),不僅支持了對(duì)浮點(diǎn)數(shù)并行處理,還推出了新一代的AVX指令集,把寄存器再一次擴(kuò)大為256位,現(xiàn)在我們的SIMD技術(shù)更加先進(jìn),處理數(shù)據(jù)運(yùn)算的能力越來(lái)越強(qiáng)了!

責(zé)任編輯:趙寧寧 來(lái)源: 編程技術(shù)宇宙
相關(guān)推薦

2022-12-22 17:46:19

2022-07-28 14:22:50

元宇宙AI

2023-04-24 08:12:59

2015-05-07 11:24:13

DockerIT技術(shù)評(píng)價(jià)新技術(shù)

2024-04-07 00:00:01

TypeScript語(yǔ)言REST

2021-05-10 09:52:35

技術(shù)隱私瀏覽器

2024-09-10 14:50:00

2021-11-30 08:26:22

ThreadLocal內(nèi)存飆升存儲(chǔ)模型

2021-08-21 15:40:24

CPU計(jì)算機(jī)電子領(lǐng)域

2019-03-28 14:10:53

CPU單核

2013-05-16 10:27:03

技術(shù)學(xué)習(xí)新技術(shù)學(xué)習(xí)建議

2020-06-22 07:47:46

提交面試官訂單

2024-01-22 09:28:27

2020-11-25 08:13:33

CPU主板GPU

2020-11-13 07:16:09

線程互斥鎖死循環(huán)

2013-09-03 16:21:07

物聯(lián)網(wǎng)IoT數(shù)據(jù)中心

2023-09-01 08:53:52

后端優(yōu)化開(kāi)發(fā)

2021-10-16 07:31:54

微信深度清理騰訊

2018-01-18 22:49:16

2020-08-11 14:58:30

技術(shù)CPU指標(biāo)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)