Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
mplapack_binary128.hpp
Go to the documentation of this file.
1#pragma once
2
10#include <uni20/config.hpp>
11#include <uni20/core/types.hpp>
12
13#if UNI20_HAS_MPLAPACK_FLOAT128
14#include <mplapack_config.h>
15#endif
16
17#if UNI20_HAS_MPLAPACK_FLOAT128 && defined(MPLAPACK_BINARY128_MODE) && \
18 (MPLAPACK_BINARY128_MODE != MPLAPACK_BINARY128_MODE_LDBL)
19#include <mpblas_binary128.h>
20
21namespace uni20::blas
22{
23
24namespace mplapack_binary128_detail
25{
26
27inline char const* char_string(char value, char (&buffer)[2])
28{
29 buffer[0] = value;
30 buffer[1] = '\0';
31 return buffer;
32}
33
34} // namespace mplapack_binary128_detail
35
36inline void gemm(char transa, char transb, blas_int m, blas_int n, blas_int k, uni20::float128 alpha,
37 uni20::float128 const* A, blas_int lda, uni20::float128 const* B, blas_int ldb, uni20::float128 beta,
38 uni20::float128* C, blas_int ldc)
39{
40 UNI20_EXTERNAL_API_CALL(BLAS, Rgemm, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
41 char transa_string[2]{};
42 char transb_string[2]{};
43 Rgemm(mplapack_binary128_detail::char_string(transa, transa_string),
44 mplapack_binary128_detail::char_string(transb, transb_string), static_cast<mplapackint>(m),
45 static_cast<mplapackint>(n), static_cast<mplapackint>(k), alpha, const_cast<uni20::float128*>(A),
46 static_cast<mplapackint>(lda), const_cast<uni20::float128*>(B), static_cast<mplapackint>(ldb), beta, C,
47 static_cast<mplapackint>(ldc));
48}
49
50inline void gemv(char trans, blas_int m, blas_int n, uni20::float128 alpha, uni20::float128 const* A, blas_int lda,
51 uni20::float128 const* x, blas_int incx, uni20::float128 beta, uni20::float128* y, blas_int incy)
52{
53 UNI20_EXTERNAL_API_CALL(BLAS, Rgemv, trans, m, n, alpha, A, lda, x, incx, beta, y, incy);
54 char trans_string[2]{};
55 Rgemv(mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(m),
56 static_cast<mplapackint>(n), alpha, const_cast<uni20::float128*>(A), static_cast<mplapackint>(lda),
57 const_cast<uni20::float128*>(x), static_cast<mplapackint>(incx), beta, y, static_cast<mplapackint>(incy));
58}
59
60inline void ger(blas_int m, blas_int n, uni20::float128 alpha, uni20::float128 const* x, blas_int incx,
61 uni20::float128 const* y, blas_int incy, uni20::float128* A, blas_int lda)
62{
63 UNI20_EXTERNAL_API_CALL(BLAS, Rger, m, n, alpha, x, incx, y, incy, A, lda);
64 Rger(static_cast<mplapackint>(m), static_cast<mplapackint>(n), alpha, const_cast<uni20::float128*>(x),
65 static_cast<mplapackint>(incx), const_cast<uni20::float128*>(y), static_cast<mplapackint>(incy), A,
66 static_cast<mplapackint>(lda));
67}
68
69inline void syrk(char uplo, char trans, blas_int n, blas_int k, uni20::float128 alpha, uni20::float128 const* A,
70 blas_int lda, uni20::float128 beta, uni20::float128* C, blas_int ldc)
71{
72 UNI20_EXTERNAL_API_CALL(BLAS, Rsyrk, uplo, trans, n, k, alpha, A, lda, beta, C, ldc);
73 char uplo_string[2]{};
74 char trans_string[2]{};
75 Rsyrk(mplapack_binary128_detail::char_string(uplo, uplo_string),
76 mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(n),
77 static_cast<mplapackint>(k), alpha, const_cast<uni20::float128*>(A), static_cast<mplapackint>(lda), beta, C,
78 static_cast<mplapackint>(ldc));
79}
80
81inline void syr2k(char uplo, char trans, blas_int n, blas_int k, uni20::float128 alpha, uni20::float128 const* A,
82 blas_int lda, uni20::float128 const* B, blas_int ldb, uni20::float128 beta, uni20::float128* C,
83 blas_int ldc)
84{
85 UNI20_EXTERNAL_API_CALL(BLAS, Rsyr2k, uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
86 char uplo_string[2]{};
87 char trans_string[2]{};
88 Rsyr2k(mplapack_binary128_detail::char_string(uplo, uplo_string),
89 mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(n),
90 static_cast<mplapackint>(k), alpha, const_cast<uni20::float128*>(A), static_cast<mplapackint>(lda),
91 const_cast<uni20::float128*>(B), static_cast<mplapackint>(ldb), beta, C, static_cast<mplapackint>(ldc));
92}
93
94inline void gemm(char transa, char transb, blas_int m, blas_int n, blas_int k, uni20::complex<uni20::float128> alpha,
97{
98 UNI20_EXTERNAL_API_CALL(BLAS, Cgemm, transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
99 char transa_string[2]{};
100 char transb_string[2]{};
101 Cgemm(mplapack_binary128_detail::char_string(transa, transa_string),
102 mplapack_binary128_detail::char_string(transb, transb_string), static_cast<mplapackint>(m),
103 static_cast<mplapackint>(n), static_cast<mplapackint>(k), alpha,
104 const_cast<uni20::complex<uni20::float128>*>(A), static_cast<mplapackint>(lda),
105 const_cast<uni20::complex<uni20::float128>*>(B), static_cast<mplapackint>(ldb), beta, C,
106 static_cast<mplapackint>(ldc));
107}
108
109inline void gemv(char trans, blas_int m, blas_int n, uni20::complex<uni20::float128> alpha,
112{
113 UNI20_EXTERNAL_API_CALL(BLAS, Cgemv, trans, m, n, alpha, A, lda, x, incx, beta, y, incy);
114 char trans_string[2]{};
115 Cgemv(mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(m),
116 static_cast<mplapackint>(n), alpha, const_cast<uni20::complex<uni20::float128>*>(A),
117 static_cast<mplapackint>(lda), const_cast<uni20::complex<uni20::float128>*>(x), static_cast<mplapackint>(incx),
118 beta, y, static_cast<mplapackint>(incy));
119}
120
121inline void geru(blas_int m, blas_int n, uni20::complex<uni20::float128> alpha,
123 blas_int incy, uni20::complex<uni20::float128>* A, blas_int lda)
124{
125 UNI20_EXTERNAL_API_CALL(BLAS, Cgeru, m, n, alpha, x, incx, y, incy, A, lda);
126 Cgeru(static_cast<mplapackint>(m), static_cast<mplapackint>(n), alpha,
127 const_cast<uni20::complex<uni20::float128>*>(x), static_cast<mplapackint>(incx),
128 const_cast<uni20::complex<uni20::float128>*>(y), static_cast<mplapackint>(incy), A,
129 static_cast<mplapackint>(lda));
130}
131
132inline void gerc(blas_int m, blas_int n, uni20::complex<uni20::float128> alpha,
134 blas_int incy, uni20::complex<uni20::float128>* A, blas_int lda)
135{
136 UNI20_EXTERNAL_API_CALL(BLAS, Cgerc, m, n, alpha, x, incx, y, incy, A, lda);
137 Cgerc(static_cast<mplapackint>(m), static_cast<mplapackint>(n), alpha,
138 const_cast<uni20::complex<uni20::float128>*>(x), static_cast<mplapackint>(incx),
139 const_cast<uni20::complex<uni20::float128>*>(y), static_cast<mplapackint>(incy), A,
140 static_cast<mplapackint>(lda));
141}
142
143inline void herk(char uplo, char trans, blas_int n, blas_int k, uni20::float128 alpha,
144 uni20::complex<uni20::float128> const* A, blas_int lda, uni20::float128 beta,
145 uni20::complex<uni20::float128>* C, blas_int ldc)
146{
147 UNI20_EXTERNAL_API_CALL(BLAS, Cherk, uplo, trans, n, k, alpha, A, lda, beta, C, ldc);
148 char uplo_string[2]{};
149 char trans_string[2]{};
150 Cherk(mplapack_binary128_detail::char_string(uplo, uplo_string),
151 mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(n),
152 static_cast<mplapackint>(k), alpha, const_cast<uni20::complex<uni20::float128>*>(A),
153 static_cast<mplapackint>(lda), beta, C, static_cast<mplapackint>(ldc));
154}
155
156inline void her2k(char uplo, char trans, blas_int n, blas_int k, uni20::complex<uni20::float128> alpha,
158 blas_int ldb, uni20::float128 beta, uni20::complex<uni20::float128>* C, blas_int ldc)
159{
160 UNI20_EXTERNAL_API_CALL(BLAS, Cher2k, uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
161 char uplo_string[2]{};
162 char trans_string[2]{};
163 Cher2k(mplapack_binary128_detail::char_string(uplo, uplo_string),
164 mplapack_binary128_detail::char_string(trans, trans_string), static_cast<mplapackint>(n),
165 static_cast<mplapackint>(k), alpha, const_cast<uni20::complex<uni20::float128>*>(A),
166 static_cast<mplapackint>(lda), const_cast<uni20::complex<uni20::float128>*>(B), static_cast<mplapackint>(ldb),
167 beta, C, static_cast<mplapackint>(ldc));
168}
169
170} // namespace uni20::blas
171
172#endif
locale_t value
Definition data_table.cpp:49
#define UNI20_EXTERNAL_API_CALL(module, func,...)
Emits a trace log entry for an outgoing backend API call.
Definition backend.hpp:90
typename detail::complex_type< Real >::type complex
Project-level complex scalar spelling.
Definition types.hpp:66
Definition blas_int.hpp:18
void gemv(char trans, blas_int m, blas_int n, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *x, blas_int incx, BLASTYPE beta, BLASTYPE *y, blas_int incy)
Definition blasproto.hpp:129
void syr2k(char uplo, char trans, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *B, blas_int ldb, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:182
void ger(blas_int m, blas_int n, BLASTYPE alpha, BLASTYPE const *x, blas_int incx, BLASTYPE const *y, blas_int incy, BLASTYPE *A, blas_int lda)
Definition blasproto.hpp:168
void gemm(char transa, char transb, blas_int m, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *B, blas_int ldb, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:121
void syrk(char uplo, char trans, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:175
void gerc(uni20::DenseMatrix< Scalar > &matrix, Scalar const &alpha, std::span< Scalar const > x, std::span< Scalar const > y)
Apply a conjugated dense rank-one update.
Definition dense_linalg.hpp:388
void geru(uni20::DenseMatrix< Scalar > &matrix, Scalar const &alpha, std::span< Scalar const > x, std::span< Scalar const > y)
Apply a dense rank-one update.
Definition dense_linalg.hpp:364
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164