Actual source code: slepcmagma.h
slepc-3.17.0 2022-03-31
1: /*
2: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3: SLEPc - Scalable Library for Eigenvalue Problem Computations
4: Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
6: This file is part of SLEPc.
7: SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9: */
10: /*
11: Macro definitions to use MAGMA functionality
12: */
14: #if !defined(SLEPCMAGMA_H)
15: #define SLEPCMAGMA_H
17: #include <magma_v2.h>
19: #define PetscCallMAGMA(func, ...) do { \
20: PetscErrorCode magma_ierr_; \
21: PetscStackPush(PetscStringize(func)); \
22: func(__VA_ARGS__,&magma_ierr_); \
23: PetscStackPop; \
25: } while (0)
26: #define CHKERRMAGMA(...) PetscCall(__VA_ARGS__)
28: #if defined(PETSC_USE_COMPLEX)
29: #if defined(PETSC_USE_REAL_SINGLE)
30: #define magma_xgeev(a,b,c,d,e,f,g,h,i,j,k,l.m.n) magma_cgeev((a),(b),(c),(magmaFloatComplex*)(d),(e),(magmaFloatComplex*)(f),(magmaFloatComplex*)(g),(h),(magmaFloatComplex*)(i),(j),(magmaFloatComplex*)(k),(l),(m),(n))
31: #define magma_xgesv_gpu(a,b,c,d,e,f,g,h) magma_cgesv_gpu((a),(b),(magmaFloatComplex_ptr)(c),(d),(e),(magmaFloatComplex_ptr)(f),(g),(h))
32: #define magma_xgetrf_gpu(a,b,c,d,e,f) magma_cgetrf_gpu((a),(b),(magmaFloatComplex_ptr)(c),(d),(e),(f))
33: #define magma_xgetri_gpu(a,b,c,d,e,f,g) magma_cgetri_gpu((a),(magmaFloatComplex_ptr)(b),(c),(d),(magmaFloatComplex_ptr)(e),(f),(g))
34: #define magma_get_xgetri_nb magma_get_cgetri_nb
35: #else
36: #define magma_xgeev(a,b,c,d,e,f,g,h,i,j,k,l,m,n) magma_zgeev((a),(b),(c),(magmaDoubleComplex*)(d),(e),(magmaDoubleComplex*)(f),(magmaDoubleComplex*)(g),(h),(magmaDoubleComplex*)(i),(j),(magmaDoubleComplex*)(k),(l),(m),(n))
37: #define magma_xgesv_gpu(a,b,c,d,e,f,g,h) magma_zgesv_gpu((a),(b),(magmaDoubleComplex_ptr)(c),(d),(e),(magmaDoubleComplex_ptr)(f),(g),(h))
38: #define magma_xgetrf_gpu(a,b,c,d,e,f) magma_zgetrf_gpu((a),(b),(magmaDoubleComplex_ptr)(c),(d),(e),(f))
39: #define magma_xgetri_gpu(a,b,c,d,e,f,g) magma_zgetri_gpu((a),(magmaDoubleComplex_ptr)(b),(c),(d),(magmaDoubleComplex_ptr)(e),(f),(g))
40: #define magma_get_xgetri_nb magma_get_zgetri_nb
41: #endif
42: #else
43: #if defined(PETSC_USE_REAL_SINGLE)
44: #define magma_xgeev magma_sgeev
45: #define magma_xgesv_gpu magma_sgesv_gpu
46: #define magma_xgetrf_gpu magma_sgetrf_gpu
47: #define magma_xgetri_gpu magma_sgetri_gpu
48: #define magma_get_xgetri_nb magma_get_sgetri_nb
49: #else
50: #define magma_xgeev magma_dgeev
51: #define magma_xgesv_gpu magma_dgesv_gpu
52: #define magma_xgetrf_gpu magma_dgetrf_gpu
53: #define magma_xgetri_gpu magma_dgetri_gpu
54: #define magma_get_xgetri_nb magma_get_dgetri_nb
55: #endif
56: #endif
58: #if defined(PETSC_USE_REAL_SINGLE)
59: #define magma_Cgesv_gpu(a,b,c,d,e,f,g,h) magma_cgesv_gpu((a),(b),(magmaFloatComplex_ptr)(c),(d),(e),(magmaFloatComplex_ptr)(f),(g),(h))
60: #else
61: #define magma_Cgesv_gpu(a,b,c,d,e,f,g,h) magma_zgesv_gpu((a),(b),(magmaDoubleComplex_ptr)(c),(d),(e),(magmaDoubleComplex_ptr)(f),(g),(h))
62: #endif
64: #endif