TRIQS/nda 2.0.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--present, The Simons Foundation
2// This file is part of TRIQS/nda and is licensed under the Apache License, Version 2.0.
3// SPDX-License-Identifier: Apache-2.0
4// See LICENSE in the root of this distribution for details.
5
10
11#pragma once
12
14#include "../tools.hpp"
15
16namespace nda::blas::f77 {
17
18 void axpy(int n, float alpha, const float *x, int incx, float *y, int incy);
19 void axpy(int n, std::complex<float> alpha, const std::complex<float> *x, int incx, std::complex<float> *y, int incy);
20 void axpy(int n, double alpha, const double *x, int incx, double *y, int incy);
21 void axpy(int n, std::complex<double> alpha, const std::complex<double> *x, int incx, std::complex<double> *y, int incy);
22
23 void copy(int n, const float *x, int incx, float *y, int incy);
24 void copy(int n, const std::complex<float> *x, int incx, std::complex<float> *y, int incy);
25 void copy(int n, const double *x, int incx, double *y, int incy);
26 void copy(int n, const std::complex<double> *x, int incx, std::complex<double> *y, int incy);
27
28 float dot(int m, const float *x, int incx, const float *y, int incy);
29 std::complex<float> dot(int m, const std::complex<float> *x, int incx, const std::complex<float> *y, int incy);
30 std::complex<float> dotc(int m, const std::complex<float> *x, int incx, const std::complex<float> *y, int incy);
31 double dot(int m, const double *x, int incx, const double *y, int incy);
32 std::complex<double> dot(int m, const std::complex<double> *x, int incx, const std::complex<double> *y, int incy);
33 std::complex<double> dotc(int m, const std::complex<double> *x, int incx, const std::complex<double> *y, int incy);
34
35 void gemm(char op_a, char op_b, int m, int n, int k, float alpha, const float *a, int lda, const float *b, int ldb, float beta, float *c, int ldc);
36 void gemm(char op_a, char op_b, int m, int n, int k, std::complex<float> alpha, const std::complex<float> *a, int lda, const std::complex<float> *b,
37 int ldb, std::complex<float> beta, std::complex<float> *c, int ldc);
38 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,
39 int ldc);
40 void gemm(char op_a, char op_b, int m, int n, int k, std::complex<double> alpha, const std::complex<double> *a, int lda,
41 const std::complex<double> *b, int ldb, std::complex<double> beta, std::complex<double> *c, int ldc);
42
43 void gemm_batch(char op_a, char op_b, int m, int n, int k, float alpha, const float **a, int lda, const float **b, int ldb, float beta, float **c,
44 int ldc, int batch_count);
45 void gemm_batch(char op_a, char op_b, int m, int n, int k, std::complex<float> alpha, const std::complex<float> **a, int lda,
46 const std::complex<float> **b, int ldb, std::complex<float> beta, std::complex<float> **c, int ldc, int batch_count);
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, std::complex<double> alpha, const std::complex<double> **a, int lda,
50 const std::complex<double> **b, int ldb, std::complex<double> beta, std::complex<double> **c, int ldc, int batch_count);
51
52 void gemm_vbatch(char op_a, char op_b, int *m, int *n, int *k, float alpha, const float **a, int *lda, const float **b, int *ldb, float beta,
53 float **c, int *ldc, int batch_count);
54 void gemm_vbatch(char op_a, char op_b, int *m, int *n, int *k, std::complex<float> alpha, const std::complex<float> **a, int *lda,
55 const std::complex<float> **b, int *ldb, std::complex<float> beta, std::complex<float> **c, int *ldc, int batch_count);
56 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,
57 double **c, int *ldc, int batch_count);
58 void gemm_vbatch(char op_a, char op_b, int *m, int *n, int *k, std::complex<double> alpha, const std::complex<double> **a, int *lda,
59 const std::complex<double> **b, int *ldb, std::complex<double> beta, std::complex<double> **c, int *ldc, int batch_count);
60
61 void gemm_batch_strided(char op_a, char op_b, int m, int n, int k, float alpha, const float *a, int lda, int stride_a, const float *b, int ldb,
62 int stride_b, float beta, float *c, int ldc, int stride_c, int batch_count);
63 void gemm_batch_strided(char op_a, char op_b, int m, int n, int k, std::complex<float> alpha, const std::complex<float> *a, int lda, int stride_a,
64 const std::complex<float> *b, int ldb, int stride_b, std::complex<float> beta, std::complex<float> *c, int ldc,
65 int stride_c, int batch_count);
66 void gemm_batch_strided(char op_a, char op_b, int m, int n, int k, double alpha, const double *a, int lda, int stride_a, const double *b, int ldb,
67 int stride_b, double beta, double *c, int ldc, int stride_c, int batch_count);
68 void gemm_batch_strided(char op_a, char op_b, int m, int n, int k, std::complex<double> alpha, const std::complex<double> *a, int lda, int stride_a,
69 const std::complex<double> *b, int ldb, int stride_b, std::complex<double> beta, std::complex<double> *c, int ldc,
70 int stride_c, int batch_count);
71
72 void gemv(char op, int m, int n, float alpha, const float *a, int lda, const float *x, int incx, float beta, float *y, int incy);
73 void gemv(char op, int m, int n, std::complex<float> alpha, const std::complex<float> *a, int lda, const std::complex<float> *x, int incx,
74 std::complex<float> beta, std::complex<float> *y, int incy);
75 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);
76 void gemv(char op, int m, int n, std::complex<double> alpha, const std::complex<double> *a, int lda, const std::complex<double> *x, int incx,
77 std::complex<double> beta, std::complex<double> *y, int incy);
78
79 void ger(int m, int n, float alpha, const float *x, int incx, const float *y, int incy, float *a, int lda);
80 void ger(int m, int n, std::complex<float> alpha, const std::complex<float> *x, int incx, const std::complex<float> *y, int incy,
81 std::complex<float> *a, int lda);
82 void gerc(int m, int n, std::complex<float> alpha, const std::complex<float> *x, int incx, const std::complex<float> *y, int incy,
83 std::complex<float> *a, int lda);
84 void ger(int m, int n, double alpha, const double *x, int incx, const double *y, int incy, double *a, int lda);
85 void ger(int m, int n, std::complex<double> alpha, const std::complex<double> *x, int incx, const std::complex<double> *y, int incy,
86 std::complex<double> *a, int lda);
87 void gerc(int m, int n, std::complex<double> alpha, const std::complex<double> *x, int incx, const std::complex<double> *y, int incy,
88 std::complex<double> *a, int lda);
89
90 void scal(int m, float alpha, float *x, int incx);
91 void scal(int m, std::complex<float> alpha, std::complex<float> *x, int incx);
92 void scal(int m, double alpha, double *x, int incx);
93 void scal(int m, std::complex<double> alpha, std::complex<double> *x, int incx);
94
95 void swap(int n, float *x, int incx, float *y, int incy); // NOLINT (this is a BLAS swap)
96 void swap(int n, std::complex<float> *x, int incx, std::complex<float> *y, int incy); // NOLINT (this is a BLAS swap)
97 void swap(int n, double *x, int incx, double *y, int incy); // NOLINT (this is a BLAS swap)
98 void swap(int n, std::complex<double> *x, int incx, std::complex<double> *y, int incy); // NOLINT (this is a BLAS swap)
99
100} // namespace nda::blas::f77
101
102namespace nda::blas {
103
104 // Import tools from the blas_lapack namespace.
105 using namespace nda::blas_lapack;
106
107} // namespace nda::blas
Provides various traits and utilities for the BLAS interface.
Provides a C++ interface for the GPU versions of various BLAS routines.