4 ms·
> I believe you are not guaranteed for the edge data of adjacent nodes to be adjacent in memory The edge data of a particular node is contiguous, but yes, the
by pgera 3y ago
> I believe you are not guaranteed for the edge data of adjacent nodes to be adjacent in memory
The edge data of a particular node is contiguous, but yes, the edge data of a collection of nodes is not contiguous. You can reorder (permute) the graph for some metric as a preprocessing step so that you get better locality for your average access pattern. This only works for static graphs though.
> For float-based edge data I think quantization works well, and I believe you can further compress the ROW/COL indices
Yes, index compression is pretty well studied and understood. The challenge here is mostly good compression ratio and high decompression performance. There are a couple of works that I'm aware of that do this for gpus. This repo by Mo Sha et al. (https://github.com/desert0616/GCGT https://github.com/desert0616/GCGT) is pretty good, and I also did some work in this space (https://github.com/pgera/efg https://github.com/pgera/efg).
- WinLychee 3y agoAwesome, thanks! Hacking on something in this space atm ;D
- WinLychee 3y agoOh one more question (checked out your repo): why the usage of GPUs here vs CPUs? The possibility of more parallelism when traversing the graph versus CPU?
- pgera 3y agoYes, you can get good performance on GPUs due to the parallelism and memory bandwidth. On a new GPU like H100, I believe you can do ~ 50-100 GTEPS (billions of traversed edges per sec) in a BFS. I'm not sure where the state of the art on CPUs is at, but you can certainly do efficient implementations on CPUs too. This paper is a few years old (https://people.csail.mit.edu/jshun/spaa2018.pdf https://people.csail.mit.edu/jshun/spaa2018.pdf), but has some numbers. For CPU based index compression/decompression, the webgraph framework is quite mature and widely used and there's also Ligra+ that does it.
- WinLychee 3y agoVery cool, will digest all this! For my use-case CPU + lots of RAM has been fast enough, and there's a balance between per-thread latency and throughput (serving data concurrently). I'm definitely interested in compressing down the graph data further to see if I can drop latency further, will see if I can adapt some of this. Super neat to see this on GPUs, will check that out too. Also a fan of https://github.com/frankmcsherry/COST https://github.com/frankmcsherry/COST if you've seen it before as well!