An open API service indexing awesome lists of open source software.

https://github.com/hdelan/msc-hpc-final-project

In this project I implement a CUDA Lanczos method to approximate the matrix exponential. The matrix exponential is an important centrality measure for large, sparse graphs.
https://github.com/hdelan/msc-hpc-final-project

cuda graph-algorithms krylov-methods

Last synced: about 1 year ago
JSON representation

In this project I implement a CUDA Lanczos method to approximate the matrix exponential. The matrix exponential is an important centrality measure for large, sparse graphs.

Awesome Lists containing this project

README

          

# A CUDA Lanczos Method to Compute Graph Centrality

First pic

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.

## Report

The accompanying report can be found at ```writeup.pdf```.

## Data
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.

## Implementations

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.