TRIQS/nda 1.3.0
Multi-dimensional array library for C++
Loading...
Searching...
No Matches
cxx_interface.hpp
Go to the documentation of this file.
1// Copyright (c) 2019-2023 Simons Foundation
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0.txt
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15// Authors: Miguel Morales, Olivier Parcollet, Nils Wentzell
16
17/**
18 * @file
19 * @brief Provides a C++ interface for various BLAS routines.
20 */
21
22#pragma once
23
24#include "../tools.hpp"
25
26#if defined(NDA_HAVE_CUDA)
27#include "./cublas_interface.hpp"
28#endif
29
30namespace nda::blas::f77 {
31
32 void axpy(int N, double alpha, const double *x, int incx, double *Y, int incy);
33 void axpy(int N, dcomplex alpha, const dcomplex *x, int incx, dcomplex *Y, int incy);
34
35 void copy(int N, const double *x, int incx, double *Y, int incy);
36 void copy(int N, const dcomplex *x, int incx, dcomplex *Y, int incy);
37
38 double dot(int M, const double *x, int incx, const double *Y, int incy);
39 dcomplex dot(int M, const dcomplex *x, int incx, const dcomplex *Y, int incy);
40 dcomplex dotc(int M, const dcomplex *x, int incx, const dcomplex *Y, int incy);
41
42 void gemm(char op_a, char op_b, int M, int N, int K, double alpha, const double *A, int LDA, const double *B, int LDB, double beta, double *C,
43 int LDC);
44 void gemm(char op_a, char op_b, int M, int N, int K, dcomplex alpha, const dcomplex *A, int LDA, const dcomplex *B, int LDB, dcomplex beta,
45 dcomplex *C, int LDC);
46
47 void gemm_batch(char op_a, char op_b, int M, int N, int K, double alpha, const double **A, int LDA, const double **B, int LDB, double beta,
48 double **C, int LDC, int batch_count);
49 void gemm_batch(char op_a, char op_b, int M, int N, int K, dcomplex alpha, const dcomplex **A, int LDA, const dcomplex **B, int LDB, dcomplex beta,
50 dcomplex **C, int LDC, int batch_count);
51
52 void gemm_vbatch(char op_a, char op_b, int *M, int *N, int *K, double alpha, const double **A, int *LDA, const double **B, int *LDB, double beta,
53 double **C, int *LDC, int batch_count);
54 void gemm_vbatch(char op_a, char op_b, int *M, int *N, int *K, dcomplex alpha, const dcomplex **A, int *LDA, const dcomplex **B, int *LDB,
55 dcomplex beta, dcomplex **C, int *LDC, int batch_count);
56
57 void gemm_batch_strided(char op_a, char op_b, int M, int N, int K, double alpha, const double *A, int LDA, int strideA, const double *B, int LDB,
58 int strideB, double beta, double *C, int LDC, int strideC, int batch_count);
59 void gemm_batch_strided(char op_a, char op_b, int M, int N, int K, dcomplex alpha, const dcomplex *A, int LDA, int strideA, const dcomplex *B,
60 int LDB, int srideB, dcomplex beta, dcomplex *C, int LDC, int strideC, int batch_count);
61
62 void gemv(char op, int M, int N, double alpha, const double *A, int LDA, const double *x, int incx, double beta, double *Y, int incy);
63 void gemv(char op, int M, int N, dcomplex alpha, const dcomplex *A, int LDA, const dcomplex *x, int incx, dcomplex beta, dcomplex *Y, int incy);
64
65 void ger(int M, int N, double alpha, const double *x, int incx, const double *Y, int incy, double *A, int LDA);
66 void ger(int M, int N, dcomplex alpha, const dcomplex *x, int incx, const dcomplex *Y, int incy, dcomplex *A, int LDA);
67
68 void scal(int M, double alpha, double *x, int incx);
69 void scal(int M, dcomplex alpha, dcomplex *x, int incx);
70
71 void swap(int N, double *x, int incx, double *Y, int incy); // NOLINT (this is a BLAS swap)
72 void swap(int N, dcomplex *x, int incx, dcomplex *Y, int incy); // NOLINT (this is a BLAS swap)
73
74} // namespace nda::blas::f77
#define F77_ddot
#define F77_zdotu
#define F77_zdotc
#define F77_chpr2
Definition cblas_f77.h:168
#define F77_dgemv
Definition cblas_f77.h:186
#define F77_stpsv
Definition cblas_f77.h:185
#define F77_cswap
Definition cblas_f77.h:111
#define F77_cher
Definition cblas_f77.h:165
#define F77_dsyr2
Definition cblas_f77.h:158
#define F77_dtpmv
Definition cblas_f77.h:190
#define F77_csyr2k
Definition cblas_f77.h:234
#define F77_ssymm
Definition cblas_f77.h:220
#define F77_sger
Definition cblas_f77.h:147
#define F77_sspr2
Definition cblas_f77.h:151
#define F77_zhpmv
Definition cblas_f77.h:171
#define F77_ssymv
Definition cblas_f77.h:144
#define F77_zsyr2k
Definition cblas_f77.h:240
#define F77_dtrmm
Definition cblas_f77.h:229
#define F77_ctbsv
Definition cblas_f77.h:200
#define F77_sgbmv
Definition cblas_f77.h:179
#define F77_sasum_sub
Definition cblas_f77.h:133
#define F77_srot
Definition cblas_f77.h:97
#define F77_dasum_sub
Definition cblas_f77.h:135
#define F77_zhbmv
Definition cblas_f77.h:170
#define F77_stpmv
Definition cblas_f77.h:182
#define F77_chpr
Definition cblas_f77.h:166
#define F77_sspmv
Definition cblas_f77.h:146
#define F77_zcopy
Definition cblas_f77.h:116
#define F77_zgemm
Definition cblas_f77.h:237
#define F77_cgemm
Definition cblas_f77.h:231
#define F77_zdotc_sub
Definition cblas_f77.h:131
#define F77_ztbmv
Definition cblas_f77.h:205
#define F77_dcopy
Definition cblas_f77.h:108
#define F77_ssyr2k
Definition cblas_f77.h:222
#define F77_caxpy
Definition cblas_f77.h:113
#define F77_dsyrk
Definition cblas_f77.h:227
#define F77_zgerc
Definition cblas_f77.h:173
#define F77_zhemm
Definition cblas_f77.h:216
#define F77_sgemm
Definition cblas_f77.h:219
#define F77_drot
Definition cblas_f77.h:101
#define F77_dtbsv
Definition cblas_f77.h:192
#define F77_ctrmm
Definition cblas_f77.h:235
#define F77_zswap
Definition cblas_f77.h:115
#define F77_ztrmm
Definition cblas_f77.h:241
#define F77_dspr2
Definition cblas_f77.h:159
#define F77_cscal
Definition cblas_f77.h:124
#define F77_srotmg
Definition cblas_f77.h:96
#define F77_cgeru
Definition cblas_f77.h:163
#define F77_dsyr
Definition cblas_f77.h:156
#define F77_zaxpy
Definition cblas_f77.h:117
#define F77_cher2k
Definition cblas_f77.h:215
#define F77_sscal
Definition cblas_f77.h:122
#define F77_cdotc_sub
Definition cblas_f77.h:129
#define F77_idamax_sub
Definition cblas_f77.h:110
#define F77_dzasum_sub
Definition cblas_f77.h:139
#define F77_ztpsv
Definition cblas_f77.h:209
#define F77_dspr
Definition cblas_f77.h:157
#define F77_ccopy
Definition cblas_f77.h:112
#define F77_ztpmv
Definition cblas_f77.h:206
#define F77_chpmv
Definition cblas_f77.h:162
#define F77_zherk
Definition cblas_f77.h:217
#define F77_cgemv
Definition cblas_f77.h:194
#define F77_xerbla
Definition cblas_f77.h:94
#define F77_drotg
Definition cblas_f77.h:99
#define F77_ssbmv
Definition cblas_f77.h:145
#define F77_ztrsv
Definition cblas_f77.h:207
#define F77_zsymm
Definition cblas_f77.h:238
#define F77_ctpmv
Definition cblas_f77.h:198
#define F77_drotm
Definition cblas_f77.h:102
#define F77_csymm
Definition cblas_f77.h:232
#define F77_dsymm
Definition cblas_f77.h:226
#define F77_dspmv
Definition cblas_f77.h:154
#define F77_zscal
Definition cblas_f77.h:125
#define F77_zhemv
Definition cblas_f77.h:169
#define F77_cher2
Definition cblas_f77.h:167
#define F77_csyrk
Definition cblas_f77.h:233
#define F77_cgerc
Definition cblas_f77.h:164
#define F77_zdscal
Definition cblas_f77.h:127
#define F77_dtrmv
Definition cblas_f77.h:188
#define F77_sdot_sub
Definition cblas_f77.h:119
#define F77_cdotu_sub
Definition cblas_f77.h:128
#define F77_dtrsv
Definition cblas_f77.h:191
#define F77_dtrsm
Definition cblas_f77.h:230
#define F77_snrm2_sub
Definition cblas_f77.h:132
#define F77_zher2k
Definition cblas_f77.h:218
#define F77_ctbmv
Definition cblas_f77.h:197
#define F77_ztrsm
Definition cblas_f77.h:242
#define F77_dtbmv
Definition cblas_f77.h:189
#define F77_dnrm2_sub
Definition cblas_f77.h:134
#define F77_scnrm2_sub
Definition cblas_f77.h:136
#define F77_dgemm
Definition cblas_f77.h:225
#define F77_strmm
Definition cblas_f77.h:223
#define FCHAR
Definition cblas_f77.h:79
#define F77_strmv
Definition cblas_f77.h:180
#define F77_ctpsv
Definition cblas_f77.h:201
#define F77_strsm
Definition cblas_f77.h:224
#define F77_srotg
Definition cblas_f77.h:95
#define F77_ctrsm
Definition cblas_f77.h:236
#define F77_chemm
Definition cblas_f77.h:213
#define F77_dger
Definition cblas_f77.h:155
#define F77_ssyrk
Definition cblas_f77.h:221
#define F77_dsymv
Definition cblas_f77.h:152
#define F77_dsyr2k
Definition cblas_f77.h:228
#define F77_zhpr2
Definition cblas_f77.h:177
#define F77_ssyr2
Definition cblas_f77.h:150
#define F77_sspr
Definition cblas_f77.h:149
#define F77_isamax_sub
Definition cblas_f77.h:106
#define F77_zher2
Definition cblas_f77.h:176
#define F77_scopy
Definition cblas_f77.h:104
#define F77_dsbmv
Definition cblas_f77.h:153
#define F77_strsv
Definition cblas_f77.h:183
#define F77_izamax_sub
Definition cblas_f77.h:118
#define FINT
Definition cblas_f77.h:86
#define F77_dscal
Definition cblas_f77.h:123
#define F77_cherk
Definition cblas_f77.h:214
#define F77_zgemv
Definition cblas_f77.h:202
#define F77_stbsv
Definition cblas_f77.h:184
#define F77_ssyr
Definition cblas_f77.h:148
#define F77_chemv
Definition cblas_f77.h:160
#define FINT2
Definition cblas_f77.h:87
#define F77_saxpy
Definition cblas_f77.h:105
#define F77_zher
Definition cblas_f77.h:174
#define F77_ztbsv
Definition cblas_f77.h:208
#define F77_icamax_sub
Definition cblas_f77.h:114
#define F77_zgbmv
Definition cblas_f77.h:203
#define F77_scasum_sub
Definition cblas_f77.h:137
#define F77_zhpr
Definition cblas_f77.h:175
#define F77_dgbmv
Definition cblas_f77.h:187
#define F77_dswap
Definition cblas_f77.h:107
#define F77_dtpsv
Definition cblas_f77.h:193
#define F77_chbmv
Definition cblas_f77.h:161
#define F77_daxpy
Definition cblas_f77.h:109
#define F77_cgbmv
Definition cblas_f77.h:195
#define F77_sgemv
Definition cblas_f77.h:178
#define F77_ddot_sub
Definition cblas_f77.h:120
#define F77_csscal
Definition cblas_f77.h:126
#define F77_ztrmv
Definition cblas_f77.h:204
#define F77_srotm
Definition cblas_f77.h:98
#define F77_zgeru
Definition cblas_f77.h:172
#define F77_ctrmv
Definition cblas_f77.h:196
#define F77_sswap
Definition cblas_f77.h:103
#define F77_dsdot_sub
Definition cblas_f77.h:121
#define F77_zdotu_sub
Definition cblas_f77.h:130
#define F77_sdsdot_sub
Definition cblas_f77.h:140
#define F77_drotmg
Definition cblas_f77.h:100
#define F77_dznrm2_sub
Definition cblas_f77.h:138
#define F77_ctrsv
Definition cblas_f77.h:199
#define F77_stbmv
Definition cblas_f77.h:181
#define F77_zsyrk
Definition cblas_f77.h:239
#define F77_GLOBAL(lcname, UCNAME)