Loading...
Searching...
No Matches
q3::execution::gpu::blas::SYCLGPUBLAS Class Reference
+ Inheritance diagram for q3::execution::gpu::blas::SYCLGPUBLAS:

Public Member Functions

 SYCLGPUBLAS (std::shared_ptr< device::GPUDeviceBackend > device_backend)
 
 ~SYCLGPUBLAS () override
 
void axpy (int number_of_elements, Complex scaling_factor, const Complex *vector_x, Complex *vector_y) const override
 
void dgemm (char transpose_a, char transpose_b, int m, int n, int k, Real alpha, const Real *matrix_a, int leading_dimension_a, const Real *matrix_b, int leading_dimension_b, Real beta, Real *matrix_c, int leading_dimension_c) const override
 
Complex dot_product (int number_of_elements, const Complex *vector_x, const Complex *vector_y) const override
 
ComplexSingle dot_product_single (int number_of_elements, const ComplexSingle *vector_x, const ComplexSingle *vector_y) const override
 
void gemm (char transpose_a, char transpose_b, int m, int n, int k, Complex alpha, const Complex *matrix_a, int leading_dimension_a, const Complex *matrix_b, int leading_dimension_b, Complex beta, Complex *matrix_c, int leading_dimension_c) const override
 
void gemm_single (char transpose_a, char transpose_b, int m, int n, int k, ComplexSingle alpha, const ComplexSingle *matrix_a, int leading_dimension_a, const ComplexSingle *matrix_b, int leading_dimension_b, ComplexSingle beta, ComplexSingle *matrix_c, int leading_dimension_c) const override
 
double norm (int number_of_elements, const Complex *vector_x) const override
 
float norm_single (int number_of_elements, const ComplexSingle *vector_x) const override
 
void scale (int number_of_elements, Complex scaling_factor, Complex *vector_x) const override
 
- Public Member Functions inherited from q3::execution::gpu::blas::GPUBLAS
 GPUBLAS (std::shared_ptr< device::GPUDeviceBackend > device_backend)
 
virtual ~GPUBLAS ()=default
 
device::GPUDeviceBackend & device_backend ()
 
const device::GPUDeviceBackend & device_backend () const
 

Additional Inherited Members

- Protected Attributes inherited from q3::execution::gpu::blas::GPUBLAS
std::shared_ptr< device::GPUDeviceBackend > device_backend_
 

Detailed Description

Definition at line 54 of file sycl.cpp.

Constructor & Destructor Documentation

◆ SYCLGPUBLAS()

q3::execution::gpu::blas::SYCLGPUBLAS::SYCLGPUBLAS ( std::shared_ptr< device::GPUDeviceBackend >  device_backend)
inlineexplicit

Construct a oneMKL BLAS wrapper.

Obtains the SYCL queue from the device backend via dynamic_cast. Pre-allocates persistent shared-memory buffers for scalar results to avoid per-call allocation overhead. Throws if the device backend is not a SYCLGPUDeviceBackend.

Definition at line 64 of file sycl.cpp.

References q3::execution::gpu::blas::GPUBLAS::device_backend_.

◆ ~SYCLGPUBLAS()

q3::execution::gpu::blas::SYCLGPUBLAS::~SYCLGPUBLAS ( )
inlineoverride

Definition at line 83 of file sycl.cpp.

Member Function Documentation

◆ axpy()

void q3::execution::gpu::blas::SYCLGPUBLAS::axpy ( int  number_of_elements,
Complex  scaling_factor,
const Complex *  vector_x,
Complex *  vector_y 
) const
inlineoverridevirtual

Scaled vector addition (ZAXPY) via oneMKL axpy.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 185 of file sycl.cpp.

◆ dgemm()

void q3::execution::gpu::blas::SYCLGPUBLAS::dgemm ( char  transpose_a,
char  transpose_b,
int  m,
int  n,
int  k,
Real  alpha,
const Real *  matrix_a,
int  leading_dimension_a,
const Real *  matrix_b,
int  leading_dimension_b,
Real  beta,
Real *  matrix_c,
int  leading_dimension_c 
) const
inlineoverridevirtual

Real double-precision DGEMM via oneMKL gemm.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 275 of file sycl.cpp.

◆ dot_product()

Complex q3::execution::gpu::blas::SYCLGPUBLAS::dot_product ( int  number_of_elements,
const Complex *  vector_x,
const Complex *  vector_y 
) const
inlineoverridevirtual

Complex double-precision conjugated dot product via oneMKL dotc.

Uses a pre-allocated shared-memory scalar buffer to avoid per-call allocation overhead in the Davidson hot loop.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 139 of file sycl.cpp.

◆ dot_product_single()

ComplexSingle q3::execution::gpu::blas::SYCLGPUBLAS::dot_product_single ( int  number_of_elements,
const ComplexSingle *  vector_x,
const ComplexSingle *  vector_y 
) const
inlineoverridevirtual

Complex single-precision conjugated dot product via oneMKL dotc.

Uses a pre-allocated shared-memory scalar buffer.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 239 of file sycl.cpp.

◆ gemm()

void q3::execution::gpu::blas::SYCLGPUBLAS::gemm ( char  transpose_a,
char  transpose_b,
int  m,
int  n,
int  k,
Complex  alpha,
const Complex *  matrix_a,
int  leading_dimension_a,
const Complex *  matrix_b,
int  leading_dimension_b,
Complex  beta,
Complex *  matrix_c,
int  leading_dimension_c 
) const
inlineoverridevirtual

Complex double-precision ZGEMM via oneMKL gemm.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 103 of file sycl.cpp.

◆ gemm_single()

void q3::execution::gpu::blas::SYCLGPUBLAS::gemm_single ( char  transpose_a,
char  transpose_b,
int  m,
int  n,
int  k,
ComplexSingle  alpha,
const ComplexSingle *  matrix_a,
int  leading_dimension_a,
const ComplexSingle *  matrix_b,
int  leading_dimension_b,
ComplexSingle  beta,
ComplexSingle *  matrix_c,
int  leading_dimension_c 
) const
inlineoverridevirtual

Complex single-precision CGEMM via oneMKL gemm.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 204 of file sycl.cpp.

◆ norm()

double q3::execution::gpu::blas::SYCLGPUBLAS::norm ( int  number_of_elements,
const Complex *  vector_x 
) const
inlineoverridevirtual

Euclidean norm of a complex double-precision vector via oneMKL nrm2.

Uses a pre-allocated shared-memory scalar buffer.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 159 of file sycl.cpp.

◆ norm_single()

float q3::execution::gpu::blas::SYCLGPUBLAS::norm_single ( int  number_of_elements,
const ComplexSingle *  vector_x 
) const
inlineoverridevirtual

Euclidean norm of a complex single-precision vector via oneMKL nrm2.

Uses a pre-allocated shared-memory scalar buffer.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 259 of file sycl.cpp.

◆ scale()

void q3::execution::gpu::blas::SYCLGPUBLAS::scale ( int  number_of_elements,
Complex  scaling_factor,
Complex *  vector_x 
) const
inlineoverridevirtual

Scale a complex double-precision vector in-place via oneMKL scal.

Implements q3::execution::gpu::blas::GPUBLAS.

Definition at line 173 of file sycl.cpp.


The documentation for this class was generated from the following file: