如何通過程式估計cache大小?

時間 2021-06-01 13:12:21

1樓:ganler

嗯,注意這是constexpr的。

std::hardware_destructive_interference_size, std::hardware_constructive_interference_size

啊咧,似乎有點偏題了...

2樓:

這個要說清楚得碼一大堆字。為了減少篇幅,只談 @邵天蘭 的答案忽略的2點。

1. 「平均訪問時間的躍公升點」不一定存在。對於全相聯(full associative)結構的cache,當訪問範圍開始稍大於cache尺寸後所有的cache slot都會在每一輪重複訪問中發生replacement,導致完全的miss而出現訪問時間躍公升;但是對於直接對映(direct map)結構的cache,101%cache大的訪問範圍只能導致1%的cache slot出現replacement,其他99%的slot不會被replace的(因為範圍內只有乙個位址能對映過去)。

訪問時間是從1倍cache尺寸後逐步變大,直到訪問範圍達到2倍cache尺寸後訪問時間飽和,沒有躍公升點;而n way set associative結構的cache介乎2者之間,依賴於n多大。這也是判斷cache結構的乙個方法。

2. 現在CPU的Replacement演算法越來越智慧型,在超執行緒、多核之類的CPU上更是會動態控制某一線程、核能用到的cache尺寸。

此外:一般程式看到的連續虛擬位址物理上並不一定連續。

3樓:

更靠譜的方式是:

可以參考openblas:

github.com/xianyi/OpenBLAS/blob/develop/cpuid_x86.c#L291或者我們直接點:

#include

#include

#include

#include

#include

std::

string

exec

(const

char

*cmd

)return

result;}

intmain

()1. Mac OS X

~> sysctl -a | grep -i hw.cachehw.cachelinesize: 64

hw.cachesize: 1717986918432768 262144 6291456 0 0 0 0 0 0

hw.cacheconfig: 8 2 2 8 0 0 0 0 0 0

2. Linux

~> getconf -a | grep -i cacheLEVEL1_ICACHE_SIZE32768LEVEL1_ICACHE_ASSOC8

LEVEL3_CACHE_LINESIZE64LEVEL4_CACHE_SIZE0

LEVEL4_CACHE_ASSOC0

LEVEL4_CACHE_LINESIZE0

Mysql我通過程式來生成乙個UUID,做主鍵可行嗎?

水巷先生 問題一分為二 Q1 MySQL我通過程式來生成乙個UUID,做主鍵可行嗎?當然,完全沒有任何問題,你完全可以這麼幹!這裡需要注意的別的問題,比如 要通過程式約束,保證唯一性。不過程式幹的事情多了,效能損耗多少都是會有的。Q2 是否有必要設定乙個無實際意義的自增ID做主鍵?當然,完全是有必要...

比軟兩個物體大小的過程是如何在腦內運作的?

我先拋個非科學的解釋吧。第一步,感覺,就是這兩個物體被人的感官接收。第二步,知覺,就是在感覺的基礎上對這兩個物體的進行綜合和解釋。這個時候我們會意識到它是兩個大小不同的物體。我們對物體大小的比較就是在這個環節。當然比較大小是人類的本能,是不需要後天學習才能掌握,而且整個過程不需要任何理性思維。但在有...

20歲如何通過自學成為一名程式設計師?

1 首先,你的簡歷就已經被很多公司乾掉了 非計算機類專業,沒有工作經驗。2 有公司讓去面試,首先做一套基礎題是最起碼的要求。要知道技術面試官很忙的,基礎題過不了關 特別是新人 的,基本沒戲。3 技術面試 HR面試,會考察你有沒有培養的潛質。4 恭喜你,終於上班了,接下來的是1 3個月的試用期,在試用...