31#ifndef __TASMANIAN_GPU_WRAPPERS_HPP
32#define __TASMANIAN_GPU_WRAPPERS_HPP
46#include "tsgAcceleratedDataStructures.hpp"
59template<
typename scalar_type>
60void solveLSmultiGPU(AccelerationContext
const *acceleration,
int n,
int m, scalar_type A[],
int nrhs, scalar_type B[]);
65template<
typename scalar_type>
66void solveLSmultiOOC(AccelerationContext
const *acceleration,
int n,
int m, scalar_type A[],
int nrhs, scalar_type B[]);
69template<
typename scalar_type>
70void solveLSmulti(AccelerationContext
const *acceleration,
int n,
int m, scalar_type A[],
int nrhs, scalar_type B[]){
71 GpuVector<scalar_type> gpuA(acceleration, m, n, A);
72 GpuVector<scalar_type> gpuB(acceleration, nrhs, n, B);
73 solveLSmultiGPU(acceleration, n, m, gpuA.data(), nrhs, gpuB.data());
74 gpuB.unload(acceleration, B);
78void factorizePLU(AccelerationContext
const *acceleration,
int n,
double A[], int_gpu_lapack ipiv[]);
80void solvePLU(AccelerationContext
const *acceleration,
char trans,
int n,
double const A[], int_gpu_lapack
const ipiv[],
double b[]);
82void solvePLU(AccelerationContext
const *acceleration,
char trans,
int n,
double const A[], int_gpu_lapack
const ipiv[],
int nrhs,
double B[]);
92template<
typename scalar_type>
93void denseMultiply(AccelerationContext
const *acceleration,
int M,
int N,
int K,
94 typename GpuVector<scalar_type>::value_type alpha, GpuVector<scalar_type>
const &A,
95 GpuVector<scalar_type>
const &B,
typename GpuVector<scalar_type>::value_type beta, scalar_type C[]);
98template<
typename scalar_type>
99void denseMultiplyMixed(AccelerationContext
const *acceleration,
int M,
int N,
int K,
typename GpuVector<scalar_type>::value_type alpha,
100 GpuVector<scalar_type>
const &A, scalar_type
const B[],
101 typename GpuVector<scalar_type>::value_type beta, scalar_type C[]){
102 GpuVector<scalar_type> gpuB(acceleration, K, N, B), gpuC(acceleration, M, N);
103 denseMultiply(acceleration, M, N, K, alpha, A, gpuB, beta, gpuC.data());
104 gpuC.unload(acceleration, C);
113template<
typename scalar_type>
114void sparseMultiply(AccelerationContext
const *acceleration,
int M,
int N,
int K,
typename GpuVector<scalar_type>::value_type alpha,
115 const GpuVector<scalar_type> &A,
const GpuVector<int> &pntr,
const GpuVector<int> &indx,
116 const GpuVector<scalar_type> &vals, scalar_type C[]);
120void sparseMultiplyMixed(AccelerationContext
const *acceleration,
int M,
int N,
int K,
typename GpuVector<T>::value_type alpha,
const GpuVector<T> &A,
121 const std::vector<int> &pntr,
const std::vector<int> &indx,
const std::vector<T> &vals, T C[]){
122 GpuVector<int> gpu_pntr(acceleration, pntr), gpu_indx(acceleration, indx);
123 GpuVector<T> gpu_vals(acceleration, vals), gpu_c(acceleration, M, N);
124 sparseMultiply(acceleration, M, N, K, alpha, A, gpu_pntr, gpu_indx, gpu_vals, gpu_c.data());
125 gpu_c.unload(acceleration, C);
Encapsulates the Tasmanian Sparse Grid module.
Definition TasmanianSparseGrid.hpp:68