-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Graph data structure for MLD #3779
Comments
Will try to sketch this data structure out today. |
Resorting the edges makes us dependent on #3737 since the current format of the lookup file assumes edges are always sorted in the way we emit them in the |
Thinking a little bit more on how to do this, I think it can be done bypassing some of the structural problems here:
Brain dump on how to do this:
|
First progress report: Got the renumbering working up until the Heat map of the access pattern on the graph during The X-axis shows the node ID space, the Y-axis is the time of execution (axis is flipped, top is start). As can already be guessed from these images, the renumbering reduces the cache-misses by more then 40%.
Never mind this was a measurement error locally, new results confirm this translates to speedup as expected: master
renumbered
|
The new numbering uses the partition information to sort border nodes first to compactify storages that need access indexed by border node ID. We also get an optimized cache performance for free sincr we can also recursively sort the nodes by cell ID. This implements issue #3779.
The new numbering uses the partition information to sort border nodes first to compactify storages that need access indexed by border node ID. We also get an optimized cache performance for free sincr we can also recursively sort the nodes by cell ID. This implements issue #3779.
This was addressed with #4089. |
We need a data structure that makes the following operations fast:
For this I propose the following data structure that basically just relies on a
StaticGraph
but enforces a node ordering that is specific to the partition.Sort all nodes by the following criterion:
Node IDs of boundary nodes at a certain level will be consecutive. That way we can easily implement a fast map: Node ID -> Boundary ID (row/column) for each cell using a vector for each level, without too much memory overhead.
We will get a lot of cache efficiency because the search on the level 0 base graph will only be within one part of the adjacency array.
We can create this in the partitioner just
after we have determined thebefore we will create theMultiLevelPartition
andCellStorage
.CellStorage
will then depend on the graph having a certain ID ordering to facilitate fast lookups.EDIT: We need to do this before the
MultiLevelPartition
because we store data reference by node ID./cc @oxidase
The text was updated successfully, but these errors were encountered: