gtc 2010 py_cula_better
DESCRIPTION
Describes a wrapper for CULA (a linear algebra library using NVDIA's CUDA technology), developed by Garrett Wright and Louis Theran (under my benign guidance :)) This is a mid-2010 poster.TRANSCRIPT
PyCULA Transparent Python Bindings for CULA
http://www.math.temple.edu/research/geometry/PyCULA/
Features
Complete CULA supportComplete PyCUDA supportMix Kernel and Runtime codeInterpreter Friendly!Combine the power of Python ModulesInterfaces directly with Numpy Integration with PyCUDAMemory ManagementSuper Simple Syntax:
Why GPU Compute in Python?
Integrate SQL databases for your scientific DataUse Scipy to read and write to MATLAB filesSimple parsing codeEasily execute multiple instances via subprocessPrototype or compute within the interpreter; No need to manually compile!Write a single program to code optimized programs on the flyEasily compress and extract data with gzip and zlib modulesTake advantage of automatic memory management; Helps write leak free code!Simple, short, clean code helps prevent bugs!
Built In Coherent Documentation:
Confused about how to use gpu_syev?From Python, just type help(gpu_syev)
Research Application
In order to sort through the enormous database of hypothetical structures we are implementing spectral analysis. Specifically we are performing log(Det()) of an energy function weighted adjacency matrix.
Having PyCULA to integrate sparse expansion kernels, GPU accelerated LAPACK, and add a Pythonic interface is a priceless utility.
References:
Atlas of Prospective Zeolite Structureshttp://www.hypotheticalzeolites.net/
Many thanks to the NSF for funding our research into the computational physics of zeolites.
Garrett Wright and Dr. Louis Theran
>>> from PyCULA.cula import * # Load PyCULA>>> a = numpy.array([[1.,1.],[0.,1.]]) # Create Data>>> culaInitialize() # Initialize Device>>> print gpu_svd(a) # Perform SVD[ 1.61803399 0.61803399] # Printed Results>>> culaShutdown() # Shutdown Device
from PyCULA.cula import *from PyCULA.my_init import *import numpy as npimport atexitimport kernel_modules #import custom kernel module code
pycuda_init_once()culaInitialize()atexit.register(cula.culaShutdown)
# This is an adjacency list, a *condensed* form of a larger sparse adjacency matrix.
E=np.array([[1 , 2 ],[ 1 , 16 ], [3 , 4 ],[ 4 , 5 ],[ 6 , 7 ],[ 7 , 8 ],[ 8 , 9 ],[ 8 , 5 ],[ 9 , 10 ],[ 9 , 4 ],[ 19 , 16 ],[ 20 , 1 ]], dtype=np.float32)
# expand reduced form into full matrix using GPGPU kernelM_ = kernel_modules.gpu_expand_kernel(E)
eigvals = gpu_devsyev(M_) # run CULA syev on GPU array M_
This is a hypothetical zeolite structure. We currently have a database of over 2 million such structures, yet only a few have been discovered in nature
Help on function gpu_syev in module PyCULA.cula:
gpu_syev(A, vectors=False, uplo='U') Takes symmetric matrix as np.array and returns eigenvalues (optionally eigenvectors) as np.array. Keyword arguments: A -- input matrix as np.array, symmetric vectors -- default == False; use 'True' to compute vectors. uplo -- Defines whether input array has data in Upper or Lower half using 'U' or 'L' respectively default=='U' Note: When vectors==False, gpu_syev returns only the eigenvalues. When vectors==True, gpu_syev returns tuple (eigenvalues,eigenvectors)(END)