Skip to content

An attempt at implementing Jacobi's method to compute SVD in PyCUDA.

Notifications You must be signed in to change notification settings

mythrandire/pycuda-svd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

svd_4750/JPCA

Project repo for E4750 Final Project: SVD

Introduction

Principal Component Analysis is a useful dimensionality reduction tool used to essentially summarize high dimensional data. A key underlying step in PCA is Singular Value Decomposition. SVD can be computed using a variety of algorithms. Of the many available algorithms that can be used to iteratively converge to the singular decomposition of a matrix, we demonstrate that the Given’s rotation calculation in the Jacobi method is parallelizable and can thus allow for faster computation of the eigenvalues and eigenvectors.

Getting Started

Serial code: serial.py

Serial code requires Helper.py function. Please store both files in same directory while running.

Parallel code was tested on Nvidia GeForce RTX2070 and Nvidia GeForce Titan X (Tesseract server).

Conclusion

One of the major issues of efficient implementation of CUDA code is efficient device memory management. The total amount of memory on the GPU device is limited and hence it is not uncommon to run into memory errors for larger data matrices.

Although our code works for data matrices upto size 17, we can further strive to improve the memory efficiency by introducing memory pooling or deallocating memory more regularly while interfacing with pycuda.

We therefore attempted a parallel implementation of Jacobi SVD algorithm.

Contributors

Ananye Pandey ([email protected]) UNI: ap3885 Dwiref Oza ([email protected] UNI: dso2119

About

An attempt at implementing Jacobi's method to compute SVD in PyCUDA.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages