程式設計中,cache align 用在哪些場合?

2021-10-05 21:53:42 字數 801 閱讀 8916

struct x  cache_aligned per_cpu[nr_cpus]
這是為了各個 cpu 操作自己的 x 結構時不要影響別的 cpu 的 cache

queue

push 和 pop 通常是不同執行緒讀寫的,放入不同 cacheline 可以有效避免不必要的 cache 淘汰。

另外,如果 queue 很複雜,成員很多,也可以考慮把 push_、pop_ 中間插入其它成員,讓他們相距至少乙個 cacheline 的距離。這在某些特殊場合下有用。

還有一些物件,你會發現它被標記為 cache_aligned 一般是因為這個物件會被用在另外乙個陣列裡,那個陣列會被多執行緒訪問。這其實和 per_cpu 差不多,只不過宣告 aligned 的地方和使用的地方在**上是分離的。例如:

// in file a

struct a

cache_aligned;

// in file b

struct array

;

為什麼要用 cache_aligned?主要原因還是為了避免 false-sharing,(a 執行緒的寫自己資料結構的操作,影響到 b 執行緒的讀寫自己資料結構的效能)

乙個資料結構,不會被多個執行緒共享,也加上了 cache_aligned。這個有一種解釋:避免這個結構跨 2 個 cacheline,在 cache 競爭比較激烈的場景下提公升 cache 利用率,提公升整體效能。

這個有一定道理,但是感覺場景不是很多,需要 case by case 地看。

DNN容器的物件(用在 html中)

token control description actionbutton 對模組進行各種操作的一般按鈕控制項 contentpane 為模組內容新增乙個佔位符 dropdownactions 簡單的對模組進行操作的下拉列表框 icon 顯示與模組相關的icon linkaction 模組操作的鏈...

c 引用在函式中的使用

1.引數與返回值都為普通情況 include include using namespace std int get int x cout 形參位址為 x 輸出 輸入引數位址為0x7ffcfbd21970 形參位址為0x7ffcfbd2194c 返回值位址為0x7ffcfbd21954 結果位址為0...

C 中 foreach最好不要用在多執行緒中

private void foreachthread int arr start 結果有的內容沒有輸出來,有的內容卻重複輸出 後來換成了 如下 private void forthread int arr start 達到了預期目的.沒有去檢視foreach的具體實現方式,但是在這裡提個醒,如果需要...