內存對齊,隨機IO和順序IO,核心頻率

內存對齊:https://blog.csdn.net/zhangyanfei01/article/details/101096913

相信絕大多數的人都瞭解內存對齊,對齊後性能高。但是其最最底層的原理是啥呢? 有的人可能會說,因爲高速緩存的工作機制。讀者你很聰明,這是原因之一。但我今天想挖的是更底層一點的原理,讓我們去內存的物理構成裏找找答案!

內存物理結構

我們來了解一下內存的物理構造,一般內存的外形圖片如下圖:

帶你深入理解內存對齊最底層原理

                                圖1 內存外形圖

一個內存是由若干個黑色的內存顆粒構成的。每一個內存顆粒叫做一個chip。每個chip內部,是由8個bank組成的。其構造如下圖:

帶你深入理解內存對齊最底層原理

                                      圖2 chip內部構成

而每一個bank是一個二維平面上的矩陣,前面文章中我們說到過。矩陣中每一個元素中都是保存了1個字節,也就是8個bit

帶你深入理解內存對齊最底層原理

                                   圖3 bank內部構成

內存編址方式

那麼對於我們在應用程序中內存中地址連續的8個字節,例如0x0000-0x0007,是從位於bank上的呢?直觀感覺,應該是在第一個bank上嗎? 其實不是的,程序員視角看起來連續的地址0x0000-0x0007,實際上位8個bank中的,每一個bank只保存了一個字節。在物理上,他們並不連續。下圖很好地闡述了實際情況。

帶你深入理解內存對齊最底層原理

                             圖4 連續8字節在內存中實際分佈

你可能想知道這是爲什麼,原因是電路工作效率。內存中的8個bank是可以並行工作的。 如果你想讀取址0x0000-0x0007,每個bank工作一次,拼起來就是你要的數據,IO效率會比較高。但要存在一個bank裏,那這個bank只能自己幹活。只能串行進行讀取,需要讀8次,這樣速度會慢很多。

結論

所以,內存對齊最最底層的原因是內存的IO是以8個字節64bit爲單位進行的。 對於64位數據寬度的內存,假如cpu也是64位的cpu(現在的計算機基本都是這樣的),每次內存IO獲取數據都是從同行同列的8個chip中各自讀取一個字節拼起來的。從內存的0地址開始,0-7字節的數據可以一次IO讀取出來,8-15字節的數據也可以一次讀取出來。

換個例子,假如你指定要獲取的是0x0001-0x0008,也是8字節,但是不是0開頭的,內存需要怎麼工作呢?沒有好辦法,內存只好先工作一次把0x0000-0x0007取出來,然後再把0x0008-0x0015取出來,把兩次的結果都返回給你。 CPU和內存IO的硬件限制導致沒辦法一次跨在兩個數據寬度中間進行IO。這樣你的應用程序就會變慢,算是計算機因爲你不懂內存對齊而給你的一點點懲罰。
————————————————
原文鏈接:https://blog.csdn.net/zhangyanfei01/article/details/101096913

 

內存隨機也比順序訪問慢,帶你深入理解內存IO過程

https://blog.csdn.net/zhangyanfei01/article/details/102541078

要真想了解一個內存的性能,需要了解帶寬(等效頻率*64bits),核心頻率,4個延時(內存延遲一般是通過CL-tRCD-tRP-tRAS四個參數來標識的),隨機讀取的時間=延時(與4個延時參數有關)*1/核心頻率。

 

順序IO,即連續的地址訪問IO,隨機IO,即隨機的地址訪問IO

核心頻率幾乎沒什麼大的提升

https://blog.csdn.net/zhangyanfei01/article/details/101419015

發佈了30 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章