為什麼 CPU 不能直接對記憶體中的資料進行運算?

時間 2021-05-31 06:43:50

1樓:木頭龍

通俗一點是麼?

這麼說吧,記憶體這東西其實並非是一定需要的。畢竟根本上資料是存放在外存(硬碟、光碟)上的。所以歸根結底,我們是需要對硬碟上的資料進行運算。

那麼舉個例子來說明一下CPU要對硬碟上兩個資料的運算:你現在在新疆的大草原上的科研站裡面,,然後寫到編號2468的書裡面第52頁紙上。

當然,你直接坐飛機去北京,到國家圖書館裡面去翻這幾本書出來找到這兩個具體是什麼數字,算完了寫回去是乙個辦法——這就是CPU直接對硬碟上的資料進行計算。

然而下乙個計算任務,是巴黎的圖書館裡面的兩本書——這是來自於網路的兩個資料。而且你還沒有護照,想飛去巴黎都不行。

所以我們還是把這些書運到烏魯木齊的機場好了,你算好了再運回去——烏魯木齊機場的倉庫就是記憶體。

想在烏魯木齊的機場算數麼?也不是不行,可是有很多複雜的運算,你口算不出來的,你需要使用科研站的裝置幫助你計算。你當然可以算一題回去科研站一趟,然後又去機場取下一道題。

但還是很費勁不是?於是你把書都運輸到科研站的書架上——書架就是一級快取。當然,之前需要先運到科研站的收發室——收發室就是二級快取。

真到了你需要計算的時候,你從書架上把書取下來,攤開在桌子上——你的桌子就是暫存器。算完一題,把結果寫好然後填好快遞單放回書架,再拿下一題要用的書。

2樓:kknd1394

你還是先問有沒有吧...

答案是有...

比如你把乙個資料放到uncacheable的地方,然後執行add eax,[mem]

就跳過了快取

3樓:dorianzheng

你的意思是為什麼要先轉移到暫存器再做算嗎?如果是的話,這麼說吧,做算可能需要多個運算元,匯流排就只有一條,所以當然是從記憶體中通過匯流排取運算元到各個暫存器再運算啊,其次就是暫存器的速度更快

4樓:P00lMaster

我覺得首先要明確一下直接對記憶體資料進行計算是指什麼。

1.如果是說有沒有一條指令可以完成讀記憶體計算再把結果寫回記憶體那顯然是有的。x86的運算指令就可以用記憶體資料當運算物件

2. 如果是更lower level一點對於微指令絕大部分情況下是沒有直接在記憶體資料上計算的. 通常應該是用load把記憶體資料都到register 然後在register上進行運算。

對於risc來說, 這些每乙個操作其實大都是一條彙編指令

3. 一些特殊情況比如一些+1的運算為了加快速度是有設計直接把運算執行在快取上的而不需要讀出資料用運算單元去計算

5樓:Evan172

馬雲直接管員工不?管,阿里巴巴剛成立時十號人,馬雲哪個都要管; 公司規劃再擴大些呢?就設經理層了,馬雲直接管經理們就行了; 再擴大些呢,就設總監、VP甚至集團Quattroporte了,馬雲管這些人就行了。

而當初追隨他的十大金剛呢?有的成了集團Quattroporte,仍然直接給他匯報; 有的位置在下面點,當個中層和底層; 還有的已經離開了。

記憶體與CPU的關係就相當於由當初的創業團隊員工變成了個中層,不直接向馬雲(CPU)匯報,上面還有幾級(cache),但是比起其它裝置來說地位高多了; 有的裝置還勉強算個中層(如硬碟),有的還在底層(如鍵盤),還有的已經被淘汰啦(如軟盤)。

為什麼在 CPU 中要用 Cache 從記憶體中快速提取資料?

sand cpu 計算速度太快,二內記憶體的讀取速度很慢,所以需要 cpu 那邊的快取來提高讀取速度。快取的材料是 SRAM 成本比記憶體高,但是快取的讀取速度快。如果沒有快取,隨著cpu越來越快,cpu 會消耗更多的時鐘週期來等待記憶體的載入,從而 cpu 的利用率越來越低。 lalala 首先在...

為什麼CPU不能像硬碟,記憶體,顯示卡一樣用數量提公升效能?

CPU的確不能僅用數量提高效能!這是因為CPU主要做序列計算,而GPU 顯示卡 主要做平行計算。1.序列計算是說,乙個問題分為很多步,每一步都必須等上一步算完結果才能開始。比如,計算3的1到100次冪,沒有算出3的49次冪,就不能開始算3的50次冪。2.平行計算和它相反,乙個問題可以分解成很多部分,...

為什麼Unity在CPU 記憶體 磁碟 網路這些占用都不高的情況下play還會卡住?

金曉宇 我工作中碰到的主要是由於解除安裝domain造成的。unity使用了兩個domain,乙個root domain,乙個child domain。通常執行都是在child domain上。乙個domain載入的assembly是不允許單獨解除安裝的,所以要解除安裝assembly只能解除安裝d...