編寫快取友好的程式

2021-04-13 04:17:45 字數 781 閱讀 6875

由於cpu的處理速度和儲存器的資料訪問速度之間有著巨大的差異,而且隨著硬體技術的發展,這個差異還會逐步加大。cpu的設計者在cpu和儲存器之間設計了快取記憶體,有的分開了指令快取(i-cache)和資料快取(d-cache)。有的沒有區分,稱為統一快取。最靠近cpu的快取稱為1級快取l1,在l1和主存之間還有二級快取l2,有的系統還設有3級快取l3。這些快取記憶體具有極高的資料訪問速度,只需要1,2個時鐘週期,接近暫存器的速度,但是由於晶元密度很高,這些資源畢竟是有限的,對於piii xeon的cpu,只有32kl1(16k i-cache,16k d-cache).還有512kl2(晶元外,統一快取)。

如果我們程式對快取記憶體的命中率很高,程式的執行速度會大大提高,要求程式元編寫出對快取記憶體友好的程式。區域性性原理在計算機系統和其他一些現實案例中應用非常廣範,主要是劃分為:時間區域性性(剛剛訪問過的資料可能很快又會被訪問)和空間區域性性(訪問的資料所在的連續位址空間內的資料很可能繼續被訪問)。

這裡有個例子:

int test()

int test1()

測試結果是:test1顯著慢於test要慢5倍以上,隨著陣列維數的增大差距擴大更厲害。

在上面2個例子中,for迴圈中的i,j,還有sum變數都有良好的時間區域性性。

test有良好的空間區域性性性,因為是按照儲存順序來訪問陣列的,test1就沒有,訪問是雜亂的。

cpu的cache組織結構是:組--->行--->塊。每次填入cache時是一次性填入連續的塊大小的資料。

關於快取記憶體的內容比較多,上面只是個簡單的示例,在矩陣乘法中,這個特性體現的更加明顯。

1 3 4 設計併發友好的應用程式

1.3.4 設計併發友好的應用程式 使用傳統的命令風格編寫多執行緒應用程式時,我們要面對兩個問題 非常難讓現有的順序 變成並行的 由於要顯式使用執行緒,必須改動大部分的基本 使用共享狀態和鎖定是困難的。必須細緻考慮怎樣使用鎖來避免爭用條件和死鎖,留下足夠的空間並行執行。函式式程式設計給了我們答案 使...

友好的生物

問題描述 w 星球是乙個和地球一樣氣候適宜 物種聚集的星球。經過多年的研究,外星生物學 家們已經發現了數萬種生物,而且這個數字還在不斷增大。w 星球上的生物很有趣,有些生物之間很友好,朝夕相伴,形影不離 但有些卻很敵 對,一見面就難免發生戰鬥。為了能夠更好地了解它們之間的友好程度,外星生物學家希望 ...

程式的編寫風格

程式設計風格雖然不會影響程式的功能,但會影響可讀性。程式的版式追求清晰 美觀,是程式風格的重要構成因素。空行起著分隔程式段落的作用。空行得體 不能過多也不能過少 將使程式的布局更加清晰。空行不會浪費記憶體,雖然列印含有空行的程式是會多消耗一些紙張,但是值得。所以不要捨不得用空行。在每個類宣告之後 每...