C 中類的大小是否會影響快取命中率?

時間 2021-05-11 22:48:03

1樓:zr scat

類大小會,類的結構也會,類的訪問順序也會。

歸根道理需要理解cache是做什麼的。

如果類當次訪問不在cache中,則會載入這個資料附近的記憶體,這時候下次訪問資料的cache命中率完全取決於離上次訪問有多遠。

如果是相鄰資料,則基本上可以命中,如果類例項在棧,其中乙個成員指標指向的空間在堆裡,則基本上不會命中。如果例項本身很大遠遠超過cache大小,則訪問相隔較遠的成員則基本也不會命中。

因此你提出問題的答案是肯定的。

2樓:

就這個例子而言,提高快取命中可能有幾個方法:

1,把樹結構展平成乙個陣列,左子結點存在父節點下乙個位置,右子節點通過父節點的乙個偏移量定位,去掉兩指標。

2,減小樹節點大小,比如使用union讓內部節點和子結點公用一塊記憶體,根據業務需求用bit拼資料,只要位數夠就行。

3,分配記憶體時,按快取行對齊。

4,vector中每項元素如果不是全訪問到,可以考慮把熱區(經常訪問的)歸在一起,冷區歸在一起。當然這可能降低可讀性。

3樓:Milo Yip

如果效能瓶頸真的是在記憶體訪問,考慮到 GetFeature() 可能唯讀 Data 的其中一小部分資訊,可以嘗試把 Data 從 AOS(array of struct)轉換成 SOA(struct of array),以增加快取命中率。

樹的遍歷比較難優化,要減少節點大小,可考慮用整數型別代替左右指標,那麼可用32甚至16位的。

4樓:

Data只訪問一遍,幾乎每次都是miss,所以不影響。

Tree 要被訪問N遍(N為Vec元素數量),受快取影響極大。

如果Tree size 足夠小(比cache小),那麼遍歷的前幾次就幾乎把tree快取入cache中,之後的遍歷可以有極高cache命中率,當N足夠大時,cache命中接近100%。

如果Tree size太大,那麼只有一部分node可以快取在cache,之後的遍歷還有可能把之前快取的犧牲,cache命中就高不了。

減少TreeNode size,或者減少node數量都可能增加命中率,但不如找別人優化好的庫直接用。

5樓:

先假設你的profiling 正確。說明計算和訪問data不會慢的,機器的順序訪存很快。不知道你樹是怎麼生成的,如果每個節點在記憶體裡很亂的話,那麼隨機訪存會很慢的。。。。

所以重點調整下樹的儲存吧。

電影銀幕和電腦螢幕的大小區別是否會影響剪輯的學習?

池魚 會。而且很明顯。1 預覽成片時所展示的細節會有差別。大屏能展現更多的細節,當然,也得有高解析度才行。另外,顯示屏的顯示色域也是很重要的。2 開展剪輯工作時的工作區域大小會有差別。大螢幕能提供更多的工作區域,在時間線的顯示和素材瀏覽上會更加便利,提高工作效率。兩個螢幕就是比乙個螢幕好用。3 學習...

在C 11中,auto關鍵字的大量使用,會影響編譯速度嗎?

原子筆 沒有測試就別隨便下結論或者杞人憂天吧。編譯器在處理XX a b時,不管XX是auto還是非auto 一樣要去檢視b的型別的,並且需要確認可以拷貝構造。所以理論上來講只會減少編譯時間,包括非自定義型別也類似。 Premature optimization is the root of all ...

一首歌中更多的使用技巧是否會影響情感的表達?

哈哈哈哈還好 所謂的聽出情感,就是本來就是通過熟練的技巧去帶動的 所以他就是在用技巧唱歌啊,技巧和情感表達不是對立的。所以您的問題也不算太對吧。看這個我喜歡的歌手說的吧 是需要氣息運用自如到歌裡,才能把情感帶出來。而不是不存在技巧,只是運用自如讓你忘記了技巧的存在,這就是厲害唱功穩呀,而有些技巧運用...