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-2024 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: Thomas Hahn, Miguel Morales, Olivier Parcollet, Nils Wentzell
16
21
22#pragma once
23
24#include "../tools.hpp"
25
26#if defined(NDA_HAVE_CUDA)
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
Provides a C++ interface for the GPU versions of various BLAS routines.
std::complex< double > dcomplex
Alias for std::complex<double> type.
Definition tools.hpp:39
Provides various traits and utilities for the BLAS interface.