numerics
Loading...
Searching...
No Matches
vector.cpp
Go to the documentation of this file.
1/// @file core/backends/blas/vector.cpp
2/// @brief BLAS backend -- cblas level-1 vector operations
3
4#include "core/vector.hpp"
5#include "../seq/impl.hpp"
6#include <cmath>
7#include <cstdio>
8
9#ifdef NUMERICS_HAS_BLAS
10# include <cblas.h>
11#endif
12
13namespace {
14void warn_blas_unavailable() {
15#ifndef NUMERICS_HAS_BLAS
16 static bool warned = false;
17 if (!warned) {
18 warned = true;
19 std::fprintf(stderr,
20 "[numerics] WARNING: Backend::blas requested but BLAS was not found at "
21 "configure time.\n"
22 " Falling back to Backend::seq.\n"
23 " Install OpenBLAS and reconfigure: "
24 "apt install libopenblas-dev\n");
25 }
26#endif
27}
28} // namespace
29
30namespace num::backends::blas {
31
34#ifdef NUMERICS_HAS_BLAS
35 cblas_dscal(static_cast<int>(v.size()), alpha, v.data(), 1);
36#else
38#endif
39}
40
41void axpy(real alpha, const Vector& x, Vector& y) {
43#ifdef NUMERICS_HAS_BLAS
44 cblas_daxpy(static_cast<int>(x.size()), alpha, x.data(), 1, y.data(), 1);
45#else
47#endif
48}
49
50real dot(const Vector& x, const Vector& y) {
52#ifdef NUMERICS_HAS_BLAS
53 return cblas_ddot(static_cast<int>(x.size()), x.data(), 1, y.data(), 1);
54#else
55 return num::backends::seq::dot(x, y);
56#endif
57}
58
59real norm(const Vector& x) {
61#ifdef NUMERICS_HAS_BLAS
62 return cblas_dnrm2(static_cast<int>(x.size()), x.data(), 1);
63#else
65#endif
66}
67
68} // namespace num::backends::blas
constexpr idx size() const noexcept
Definition vector.hpp:77
real dot(const Vector &x, const Vector &y)
Definition vector.cpp:50
void axpy(real alpha, const Vector &x, Vector &y)
Definition vector.cpp:41
real norm(const Vector &x)
Definition vector.cpp:59
void scale(Vector &v, real alpha)
Definition vector.cpp:32
real dot(const Vector &x, const Vector &y)
Definition vector.cpp:21
void scale(Vector &v, real alpha)
Definition vector.cpp:9
real norm(const Vector &x)
Definition vector.cpp:27
void axpy(real alpha, const Vector &x, Vector &y)
Definition vector.cpp:17
double real
Definition types.hpp:10
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
Vector operations.