一、cache快取
cache與主存之間是以塊為單位讀寫的,這樣設計是為了符合程式執行的區域性性原理--時間區域性性原理與空間區域性性原理(參見《計算機組成原理》)
二維陣列行遍歷比列遍歷要快,是由於二維陣列是按行儲存的,cache從主存中讀入塊,會將同行相鄰元素一起寫入cache,導致行遍歷cache命中率大於列遍歷cache命中率。
publicclass
cachetest
}long endtime =system.currenttimemillis();
long cachetime = endtime -starttime;
system.out.println("cache time :" +cachetime);
starttime =system.currenttimemillis();
for (int j = 0; j < column_num; j++)
}endtime =system.currenttimemillis();
system.out.println("no cache time :" + (endtime -starttime));
}}
二、偽共享
偽共享:當乙個cache行中有多個變數,多執行緒不能同時修改更新這多個變數。導致多執行緒的序列執行
/** 解決偽共享方法一:cache行為64b,物件頭8b,加上變數8b,加上填充的6個無用變數48b,達到乙個cache行對應乙個變數
**/public
final
static
class
filedlong
/** 解決偽共享方法二:sun.misc.contended註解
**/@contended
public
final
static
class
filedlong2
cpu快取偽共享
描述 引數 返回值 建立人 yufeng.lin ucarinc.com 建立時間 修改人和其它資訊 public class fadeshare implements runnable public fadeshare int i 設計4個執行緒,執行同乙個計算量 計算前後時間 param arg...
共享與偽共享
共享就是乙個記憶體區域的資料被多個處理器訪問,偽共享就是不是真的共享。這裡的共享這個概念是基於邏輯層面的。實際上偽共享與共享在cache line 上實際都是共享的。cpu訪問的資料都是從cache line 中讀取的。如果cpu 在cache 中找不到需要的變數,則稱快取未命中。未命中時,需要通過...
Cache一致性協議與偽共享問題
在說偽共享問題之前,有必要聊一聊什麼是cache一致性協議 時間區域性性 如果乙個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問 比如迴圈 方法的反覆呼叫等 空間區域性性 如果乙個儲存器的位置被引用,那麼將來他附近的位置也會被引用 比如順序結構 陣列 cpu在摩爾定律的指導下以每18個月翻一番的...