簡體   English   中英

如何減少圖遍歷算法(例如DFS和BFS)上的緩存丟失?

[英]How to reduce cache misses on graph traversal algorithms like DFS and BFS?

我想知道如何修改基本的BFS和DFS算法,以便在順序或並行實現它們時減少高速緩存未命中。

我讀到, 頂點(或)節點的排序可以在一定程度上幫助減少緩存丟失 ,但是我無法完全理解像RCM(Reverse Cuthill–McKee)這樣的排序算法如何幫助減少基本Intel上的緩存丟失體系結構(例如具有私有L1,L2和共享L3的多核)?

除了對頂點進行排序之外,是否還有其他想法可以減少緩存丟失?

我的觀點是重新排序可以提供幫助,不能保證做到這一點。 讓我們以下面的結構為例,在每一行上,您都有節點的鄰居。

Node 1: 4, 5, 37, 12, 11, 2, 3
Node 2: 67, 11, 33, 45
Node 3:
......
Node N: 65, 56, 99, 44, 32, 1, 3

例如,當您執行DFS時,您位於節點1上。當您找到節點37時,您需要跳轉到節點37上 ,但是節點2可能在內存中更近 ,因此被緩存的可能性更高。 因此, 對頂點進行排序可減少通過內存的跳轉步驟,從而減少高速緩存未命中

但是,我認為排序可以更智能。 例如,當您將節點的頂點排序為100時,則節點1,2,3較遠,因此您可能有興趣首先將更靠近節點100的相鄰節點置於頂點。因此,基本上可以根據與目標節點的距離

這些技術可能對非常大的圖有所幫助,但在很大程度上取決於圖的拓撲

要提出一個圖形結構,我會這樣:

我會使用2 x 1D數組:

  • 一個存儲每個節點的所有鄰居
  • 一個用於為每個節點存儲鄰居開始的第一個數組中的索引

例:

Neighbors: 1 2 3 4 2 4 5 6 7 9 0
Neighbor Indexes: 0 2 5 7 9

The neighbors of Node 0 will start from Neighbors[Neighbor Indexes[0]] until Neighbors[Neighbor Indexes[1]].
The neighbors of Node 1 will start from Neighbors[Neighbor Indexes[1]] until Neighbors[Neighbor Indexes[2]].

等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM