Actual source code: aijmkl.h
1: /*
2: Wrappers for mkl_cspblas_ routines.
3: A more elegant way to do this would be to use an approach like that used in petsclbaslapack_mangle.h,
4: but since the MKL sparse BLAS routines are not going to be as widely used, and because
5: we don't have to worry about Fortran name mangling, this seems OK for now.
6: */
8: /* Have to redefine MKL_Complex16 and MKL_Complex8 as PetscScalar for the complex number cases.
9: * This works fine with a C99 compiler -- still need to verify that this works with C89.
10: * Note: These definitions need to occur BEFORE including MKL headers. */
11: #define MKL_Complex16 PetscScalar
12: #define MKL_Complex8 PetscScalar
14: #if !defined(PETSC_USE_COMPLEX)
15: #if defined(PETSC_USE_REAL_SINGLE)
16: #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_scsrgemv(transa, m, a, ia, ja, x, y)
17: #elif defined(PETSC_USE_REAL_DOUBLE)
18: #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_dcsrgemv(transa, m, a, ia, ja, x, y)
19: #endif
20: #else
21: #if defined(PETSC_USE_REAL_SINGLE)
22: #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_ccsrgemv(transa, m, a, ia, ja, x, y)
23: #elif defined(PETSC_USE_REAL_DOUBLE)
24: #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_zcsrgemv(transa, m, a, ia, ja, x, y)
25: #endif
26: #endif
28: /* Note: MKL releases prior to the end of 2014 do not have a const-correct interface -> ugly casts necessary.
29: Does not apply to mkl_sparse_x_*()-routines, because these have been introduced later. */
30: #if !defined(PETSC_USE_COMPLEX)
31: #if defined(PETSC_USE_REAL_SINGLE)
32: #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_scsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y)
33: #elif defined(PETSC_USE_REAL_DOUBLE)
34: #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_dcsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y)
35: #endif
36: #else
37: #if defined(PETSC_USE_REAL_SINGLE)
38: #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_ccsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y)
39: #elif defined(PETSC_USE_REAL_DOUBLE)
40: #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_zcsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y)
41: #endif
42: #endif
44: #if !defined(PETSC_USE_COMPLEX)
45: #if defined(PETSC_USE_REAL_SINGLE)
46: #define mkl_sparse_x_create_csr mkl_sparse_s_create_csr
47: #elif defined(PETSC_USE_REAL_DOUBLE)
48: #define mkl_sparse_x_create_csr mkl_sparse_d_create_csr
49: #endif
50: #else
51: #if defined(PETSC_USE_REAL_SINGLE)
52: #define mkl_sparse_x_create_csr mkl_sparse_c_create_csr
53: #elif defined(PETSC_USE_REAL_DOUBLE)
54: #define mkl_sparse_x_create_csr mkl_sparse_z_create_csr
55: #endif
56: #endif
58: #if !defined(PETSC_USE_COMPLEX)
59: #if defined(PETSC_USE_REAL_SINGLE)
60: #define mkl_sparse_x_mv mkl_sparse_s_mv
61: #elif defined(PETSC_USE_REAL_DOUBLE)
62: #define mkl_sparse_x_mv mkl_sparse_d_mv
63: #endif
64: #else
65: #if defined(PETSC_USE_REAL_SINGLE)
66: #define mkl_sparse_x_mv mkl_sparse_c_mv
67: #elif defined(PETSC_USE_REAL_DOUBLE)
68: #define mkl_sparse_x_mv mkl_sparse_z_mv
69: #endif
70: #endif
72: #if !defined(PETSC_USE_COMPLEX)
73: #if defined(PETSC_USE_REAL_SINGLE)
74: #define mkl_sparse_x_export_csr mkl_sparse_s_export_csr
75: #elif defined(PETSC_USE_REAL_DOUBLE)
76: #define mkl_sparse_x_export_csr mkl_sparse_d_export_csr
77: #endif
78: #else
79: #if defined(PETSC_USE_REAL_SINGLE)
80: #define mkl_sparse_x_export_csr mkl_sparse_c_export_csr
81: #elif defined(PETSC_USE_REAL_DOUBLE)
82: #define mkl_sparse_x_export_csr mkl_sparse_z_export_csr
83: #endif
84: #endif