Skip to content

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.

Notifications You must be signed in to change notification settings

hdelan/MSc-HPC-Final-Project

Repository files navigation

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.

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published