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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.


Languages

Language:Cuda 72.5%Language:C++ 23.8%Language:Makefile 1.6%Language:C 1.2%Language:MATLAB 0.6%Language:Shell 0.3%