Source code for skcuda.pcula

#!/usr/bin/env/python

"""
Python interface to multi-GPU CULA toolkit functions.
"""

import ctypes
import sys

from . import cuda
from .cula import culaCheckStatus

if 'linux' in sys.platform:
    _libpcula_libname_list = ['libcula_scalapack.so']
elif sys.platform == 'darwin':
    _libpcula_libname_list = ['libcula_scalapack.dylib']
else:
    raise RuntimeError('unsupported platform')

_load_err = ''
for _lib in  _libpcula_libname_list:
    try:
        _libpcula = ctypes.cdll.LoadLibrary(_lib)
    except OSError:
        _load_err += ('' if _load_err == '' else ', ') + _lib
    else:
        _load_err = ''
        break
if _load_err:
    raise OSError('%s not found' % _load_err)

class pculaConfig(ctypes.Structure):
    _fields_ = [
        ('ncuda', ctypes.c_int),
        ('cudaDeviceList', ctypes.c_void_p),
        ('maxCudaMemoryUsage', ctypes.c_void_p),
        ('preserveTuningResult', ctypes.c_int),
        ('dotFileName', ctypes.c_char_p),
        ('timelineFileName', ctypes.c_char_p)]

_libpcula.pculaConfigInit.restype = int
_libpcula.pculaConfigInit.argtypes = [ctypes.c_void_p]
[docs]def pculaConfigInit(config): """ Initialize pCULA configuration structure to sensible defaults. """ status = _libpcula.pculaConfigInit(ctypes.byref(config)) culaCheckStatus(status)
# SGEMM, DGEMM, CGEMM, ZGEMM _libpcula.pculaSgemm.restype = int _libpcula.pculaSgemm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_float, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_float, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSgemm(config, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc): """ Matrix-matrix product for general matrix. """ status = _libpcula.pculaSgemm(ctypes.byref(config), transa, transb, m, n, k, alpha, int(A), lda, int(B), ldb, beta, int(C), ldc) culaCheckStatus(status)
_libpcula.pculaDgemm.restype = int _libpcula.pculaDgemm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_double, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_double, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDgemm(config, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc): """ Matrix-matrix product for general matrix. """ status = _libpcula.pculaDgemm(ctypes.byref(config), transa, transb, m, n, k, alpha, int(A), lda, int(B), ldb, beta, int(C), ldc) culaCheckStatus(status)
_libpcula.pculaCgemm.restype = int _libpcula.pculaCgemm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_int, cuda.cuFloatComplex, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, cuda.cuFloatComplex, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCgemm(config, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc): """ Matrix-matrix product for general matrix. """ status = _libpcula.pculaCgemm(ctypes.byref(config), transa, transb, m, n, k, alpha, int(A), lda, int(B), ldb, beta, int(C), ldc) culaCheckStatus(status)
_libpcula.pculaZgemm.restype = int _libpcula.pculaZgemm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_int, cuda.cuDoubleComplex, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, cuda.cuDoubleComplex, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZgemm(config, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc): """ Matrix-matrix product for general matrix. """ status = _libpcula.pculaZgemm(ctypes.byref(config), transa, transb, m, n, k, alpha, int(A), lda, int(B), ldb, beta, int(C), ldc) culaCheckStatus(status)
# STRSM, DTRSM, CTRSM, ZTRSM _libpcula.pculaStrsm.restype = int _libpcula.pculaStrsm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_float, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaStrsm(config, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb): """ Triangular system solve. """ status = _libpcula.pculaStrsm(ctypes.byref(config), side, uplo, transa, diag, m, n, alpha, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaDtrsm.restype = int _libpcula.pculaDtrsm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_double, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDtrsm(config, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb): """ Triangular system solve. """ status = _libpcula.pculaDtrsm(ctypes.byref(config), side, uplo, transa, diag, m, n, alpha, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaCtrsm.restype = int _libpcula.pculaCtrsm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, cuda.cuFloatComplex, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCtrsm(config, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb): """ Triangular system solve. """ status = _libpcula.pculaCtrsm(ctypes.byref(config), side, uplo, transa, diag, m, n, alpha, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaZtrsm.restype = int _libpcula.pculaZtrsm.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_char, ctypes.c_int, ctypes.c_int, cuda.cuDoubleComplex, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZtrsm(config, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb): """ Triangular system solve. """ status = _libpcula.pculaZtrsm(ctypes.byref(config), side, uplo, transa, diag, m, n, alpha, int(a), lda, int(b), ldb) culaCheckStatus(status)
# SGESV, DGESV, CGESV, ZGESV _libpcula.pculaSgesv.restype = int _libpcula.pculaSgesv.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSgesv(config, n, nrhs, a, lda, ipiv, b, ldb): """ General system solve using LU decomposition. """ status = _libpcula.pculaSgesv(ctypes.byref(config), n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaDgesv.restype = int _libpcula.pculaDgesv.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDgesv(config, n, nrhs, a, lda, ipiv, b, ldb): """ General system solve using LU decomposition. """ status = _libpcula.pculaDgesv(ctypes.byref(config), n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaCgesv.restype = int _libpcula.pculaCgesv.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCgesv(config, n, nrhs, a, lda, ipiv, b, ldb): """ General system solve using LU decomposition. """ status = _libpcula.pculaCgesv(ctypes.byref(config), n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaZgesv.restype = int _libpcula.pculaZgesv.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZgesv(config, n, nrhs, a, lda, ipiv, b, ldb): """ General system solve using LU decomposition. """ status = _libpcula.pculaZgesv(ctypes.byref(config), n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
# SGETRF, DGETRF, CGETRF, ZGETRF _libpcula.pculaSgetrf.restype = int _libpcula.pculaSgetrf.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p]
[docs]def pculaSgetrf(config, m, n, a, lda, ipiv): """ LU decomposition. """ status = _libpcula.pculaSgetrf(ctypes.byref(config), m, n, int(a), lda, int(ipiv)) culaCheckStatus(status)
_libpcula.pculaDgetrf.restype = int _libpcula.pculaDgetrf.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p]
[docs]def pculaDgetrf(config, m, n, a, lda, ipiv): """ LU decomposition. """ status = _libpcula.pculaDgetrf(ctypes.byref(config), m, n, int(a), lda, int(ipiv)) culaCheckStatus(status)
_libpcula.pculaCgetrf.restype = int _libpcula.pculaCgetrf.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p]
[docs]def pculaCgetrf(config, m, n, a, lda, ipiv): """ LU decomposition. """ status = _libpcula.pculaCgetrf(ctypes.byref(config), m, n, int(a), lda, int(ipiv)) culaCheckStatus(status)
_libpcula.pculaZgetrf.restype = int _libpcula.pculaZgetrf.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p]
[docs]def pculaZgetrf(config, m, n, a, lda, ipiv): """ LU decomposition. """ status = _libpcula.pculaZgetrf(ctypes.byref(config), m, n, int(a), lda, int(ipiv)) culaCheckStatus(status)
# SGETRS, DGETRS, CGETRS, ZGETRS _libpcula.pculaSgetrs.restype = int _libpcula.pculaSgetrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSgetrs(config, trans, n, nrhs, a, lda, ipiv, b, ldb): """ LU solve. """ status = _libpcula.pculaSgetrs(ctypes.byref(config), trans, n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaDgetrs.restype = int _libpcula.pculaDgetrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDgetrs(config, trans, n, nrhs, a, lda, ipiv, b, ldb): """ LU solve. """ status = _libpcula.pculaDgetrs(ctypes.byref(config), trans, n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaCgetrs.restype = int _libpcula.pculaCgetrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCgetrs(config, trans, n, nrhs, a, lda, ipiv, b, ldb): """ LU solve. """ status = _libpcula.pculaCgetrs(ctypes.byref(config), trans, n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
_libpcula.pculaZgetrs.restype = int _libpcula.pculaZgetrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZgetrs(config, trans, n, nrhs, a, lda, ipiv, b, ldb): """ LU solve. """ status = _libpcula.pculaZgetrs(ctypes.byref(config), trans, n, nrhs, int(a), lda, int(ipiv), int(b), ldb) culaCheckStatus(status)
# SPOSV, DPOSV, CPOSV, ZPOSV _libpcula.pculaSposv.restype = int _libpcula.pculaSposv.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSposv(config, uplo, n, nrhs, a, lda, b, ldb): """ QR factorization. """ status = _libpcula.pculaSposv(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaDposv.restype = int _libpcula.pculaDposv.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDposv(config, uplo, n, nrhs, a, lda, b, ldb): """ QR factorization. """ status = _libpcula.pculaDposv(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaCposv.restype = int _libpcula.pculaCposv.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCposv(config, uplo, n, nrhs, a, lda, b, ldb): """ QR factorization. """ status = _libpcula.pculaCposv(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaZposv.restype = int _libpcula.pculaZposv.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZposv(config, uplo, n, nrhs, a, lda, b, ldb): """ QR factorization. """ status = _libpcula.pculaZposv(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
# SPOTRF, DPOTRF, CPOTRF, ZPOTRF _libpcula.pculaSpotrf.restype = int _libpcula.pculaSpotrf.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSpotrf(config, uplo, n, a, lda): """ Cholesky decomposition. """ status = _libpcula.pculaSpotrf(ctypes.byref(config), uplo, n, int(a), lda) culaCheckStatus(status)
_libpcula.pculaDpotrf.restype = int _libpcula.pculaDpotrf.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDpotrf(config, uplo, n, a, lda): """ Cholesky decomposition. """ status = _libpcula.pculaDpotrf(ctypes.byref(config), uplo, n, int(a), lda) culaCheckStatus(status)
_libpcula.pculaCpotrf.restype = int _libpcula.pculaCpotrf.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCpotrf(config, uplo, n, a, lda): """ Cholesky decomposition. """ status = _libpcula.pculaCpotrf(ctypes.byref(config), uplo, n, int(a), lda) culaCheckStatus(status)
_libpcula.pculaZpotrf.restype = int _libpcula.pculaZpotrf.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZpotrf(config, uplo, n, a, lda): """ Cholesky decomposition. """ status = _libpcula.pculaZpotrf(ctypes.byref(config), uplo, n, int(a), lda) culaCheckStatus(status)
# SPOTRS, DPOTRS, CPOTRS, ZPOTRS _libpcula.pculaSpotrs.restype = int _libpcula.pculaSpotrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaSpotrs(config, uplo, n, nrhs, a, lda, b, ldb): """ Cholesky solve. """ status = _libpcula.pculaSpotrs(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaDpotrs.restype = int _libpcula.pculaDpotrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaDpotrs(config, uplo, n, nrhs, a, lda, b, ldb): """ Cholesky solve. """ status = _libpcula.pculaDpotrs(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaCpotrs.restype = int _libpcula.pculaCpotrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaCpotrs(config, uplo, n, nrhs, a, lda, b, ldb): """ Cholesky solve. """ status = _libpcula.pculaCpotrs(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)
_libpcula.pculaZpotrs.restype = int _libpcula.pculaZpotrs.argtypes = [ctypes.c_void_p, ctypes.c_char, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]
[docs]def pculaZpotrs(config, uplo, n, nrhs, a, lda, b, ldb): """ Cholesky solve. """ status = _libpcula.pculaZpotrs(ctypes.byref(config), uplo, n, nrhs, int(a), lda, int(b), ldb) culaCheckStatus(status)