In the analysis of networks it is of great importance to identify central and non-central nodes. There are countless ways of measuring the centrality of nodes in a network, all with slightly different interpretations of what it means to be central.
The aim of this project is to compute the centrality of nodes in an undirected graph using the exponential matrix function:
will be approximated without forming
explicitly, instead using Krylov subspace methods, most notably the Lanczos method. This makes computing
scalable to the limits of the memory hardware, which are tested in this project.
This project computes both in serial and in parallel using CUDA.
The accompanying report can be found at writeup.pdf
.
In order to run code, data must be downloaded from:
https://drive.google.com/drive/folders/1HdyMdnjphMtafk8TBbWc0L-2V4OeWlmj?usp=sharing
and untarred. Please move the data/
file (extracted from data.tar
) in this root directory.
There are many implementations of the Lanczos method in this project directory:
- A serial method. See
serial/README.md
- A CUDA method using on-card multiplication. See
parallel-mult-on-card/README.md
- A CUDA method using two cards. See
parallel-two-cards/README.md
- A final CUDA implementation. Which uses a CUDA Lanczos method, and a multithreaded CBLAS multOut routine. See
parallel-final/README.md
All directories except final
include tests that check the accuracy of the method and of kernels.
Each implementation has its own lib/
with slightly different code implementations. The final version of code can be found in parallel-final/lib
.
All code found in parallel-*
directories must be run on a CUDA-enabled device.