5#include "../seq/impl.hpp"
9#ifdef NUMERICS_HAS_BLAS
14void warn_blas_unavailable() {
15#ifndef NUMERICS_HAS_BLAS
16 static bool warned =
false;
20 "[numerics] WARNING: Backend::blas requested but BLAS was "
23 " Falling back to Backend::seq.\n"
24 " Install OpenBLAS and reconfigure: "
25 "apt install libopenblas-dev\n");
34 warn_blas_unavailable();
35#ifdef NUMERICS_HAS_BLAS
36 cblas_dscal(
static_cast<int>(v.
size()), alpha, v.
data(), 1);
43 warn_blas_unavailable();
44#ifdef NUMERICS_HAS_BLAS
45 cblas_daxpy(
static_cast<int>(x.
size()), alpha, x.
data(), 1, y.
data(), 1);
52 warn_blas_unavailable();
53#ifdef NUMERICS_HAS_BLAS
54 return cblas_ddot(
static_cast<int>(x.
size()), x.
data(), 1, y.
data(), 1);
61 warn_blas_unavailable();
62#ifdef NUMERICS_HAS_BLAS
63 return cblas_dnrm2(
static_cast<int>(x.
size()), x.
data(), 1);
constexpr idx size() const noexcept
real dot(const Vector &x, const Vector &y)
void axpy(real alpha, const Vector &x, Vector &y)
real norm(const Vector &x)
void scale(Vector &v, real alpha)
real dot(const Vector &x, const Vector &y)
void scale(Vector &v, real alpha)
real norm(const Vector &x)
void axpy(real alpha, const Vector &x, Vector &y)