Skip to content

Commit

Permalink
Merge pull request #8 from correaa/more-sonar-240420
Browse files Browse the repository at this point in the history
more sonar
  • Loading branch information
correaa authored Apr 20, 2024
2 parents 8f45083 + 6b73075 commit 15548ed
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 17 deletions.
8 changes: 2 additions & 6 deletions include/boost/multi/adaptors/blas/core.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,6 @@ template<class XP, class X = typename std::pointer_traits<XP>::element_type, cla
ixamax(s) ixamax(d) ixamax(c) ixamax(z)
} // end namespace core

// #undef xnrm2
#undef xasum
#undef ixamax

Expand All @@ -355,11 +354,6 @@ template<class XP, class X = typename std::pointer_traits<XP>::element_type, cla

namespace core {

// xgemv(s) xgemv(d) xgemv(c) xgemv(z)
// xger(s) xger(d)
// xgeru(c) xgeru(z)
// xgerc(c) xgerc(z)

using std::enable_if_t;
using std::is_assignable;

Expand All @@ -370,6 +364,8 @@ template<class A, class M, class X, class B, class Y, enable_if_t<is_z<M>{} && i
BLAS(zgemv)(trans, m, n, *a, reinterpret_cast<z const*>(ma), lda, reinterpret_cast<z const*>(x), incx, *b, reinterpret_cast<z*>(y), incy); // NOLINT(fuchsia-default-arguments-calls,google-readability-casting,readability-identifier-length,cppcoreguidelines-pro-type-reinterpret-cast) // NOSONAR
}

// TODO(correaa) implement get, geru, gerc

} // end namespace core

template<class T>
Expand Down
8 changes: 3 additions & 5 deletions include/boost/multi/adaptors/blas/gemm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,7 @@ auto gemm_n(Context&& ctxt, typename It2DA::element alpha, It2DA a_first, Size a
if(a_count == 0) { return c_first; }

if (a_first->stride()==1 && b_first->stride()==1 && c_first->stride()==1){
// TODO(correaa) : check why these two branches are identical
/* if(b_first->size()==1)*/{CTXT->gemm('C', 'N', c_first->size(), a_count, a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->size() , &beta, base(c_first), c_first.stride());}
/* else {CTXT->gemm('C', 'N', c_first->size(), a_count, a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->size() , &beta, base(c_first), c_first.stride());}*/
{CTXT->gemm('C', 'N', c_first->size(), a_count, a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->size() , &beta, base(c_first), c_first.stride());}
}else if(a_first->stride()==1 && b_first. stride()==1 && c_first->stride()==1){
if (a_count==1) {CTXT->gemm('C', 'N', a_count, c_first->size(), a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->size() , &beta, base(c_first), c_first.stride());}
else {CTXT->gemm('C', 'N', c_first->size(), a_count, a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first.stride(), &beta, base(c_first), c_first.stride());}
Expand All @@ -98,7 +96,7 @@ auto gemm_n(Context&& ctxt, typename It2DA::element alpha, It2DA a_first, Size a
{CTXT->gemm('C', 'T', c_first->size(), a_count, a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->stride(), &beta, base(c_first), c_first->stride());}
}else if(a_first. stride()==1 && b_first. stride()==1 && c_first->stride()==1){
{CTXT->gemm('C', 'T', a_count, c_first->size(), a_first->size(), &alpha, underlying(base(b_first)), b_first->stride(), base(a_first), a_first->stride(), &beta, base(c_first), c_first. stride());}
}else{assert(0);} // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay,hicpp-no-array-decay)
}else{assert(0);} // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay,hicpp-no-array-decay)

return c_first + a_count;
}
Expand Down Expand Up @@ -202,7 +200,7 @@ class gemm_iterator {
using value_type = typename std::iterator_traits<ItA>::value_type;
using pointer = std::nullptr_t;
using reference = gemm_reference<decltype(b_begin_->extensions())>;
using iterator_category = std::random_access_iterator_tag; // using iterator_category = std::input_iterator_tag;
using iterator_category = std::random_access_iterator_tag;

static_assert( std::is_base_of<std::random_access_iterator_tag, typename std::iterator_traits<gemm_iterator>::iterator_category>{} );

Expand Down
11 changes: 5 additions & 6 deletions include/boost/multi/adaptors/blas/gemv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ auto gemv_n(Context ctxt, typename MIt::element a, MIt m_first, Size count, XIt
else {throw gemv_stride_error{"not BLAS-implemented"};} // LCOV_EXCL_LINE
} else {
if (m_first->stride()==1) {ctxt->gemv('C', m_first->size(), count, &a, underlying(m_first.base()), m_first. stride(), x_first.base(), x_first.stride(), &b, y_first.base(), y_first.stride());}
// else if(m_first. stride()==1) {assert(0);} // not implemented in blas (use cblas?)
else {throw gemv_stride_error{"not BLAS-implemented"};} // LCOV_EXCL_LINE
}

Expand All @@ -42,15 +41,15 @@ auto gemv_n(Context ctxt, typename MIt::element a, MIt m_first, Size count, XIt
template<class A, class MIt, class Size, class XIt, class B, class YIt>
auto gemv_n(A a, MIt m_first, Size count, XIt x_first, B b, YIt y_first) { // NOLINT(readability-identifier-length) BLAS naming
blas::context ctxt;
return gemv_n(&ctxt, static_cast<typename MIt::element>(a), m_first, count, x_first, b, y_first);
return gemv_n(&ctxt, static_cast<typename MIt::element>(a), m_first, count, x_first, static_cast<typename MIt::element>(b), y_first);
}

template<class Ctxt, class A, class M, class V, class B, class W>
auto gemv(Ctxt ctxt, A const& a, M const& m, V const& v, B const& b, W&& w) -> W&& { // NOLINT(readability-identifier-length) BLAS naming
assert(size( m) == size(w) );
assert(size(~m) == size(v) );

gemv_n(ctxt, a, begin(m), size(m), begin(v), b, begin(w)); // NOLINT(fuchsia-default-arguments-calls)
gemv_n(ctxt, static_cast<typename M::element>(a), begin(m), size(m), begin(v), static_cast<typename M::element>(b), begin(w)); // NOLINT(fuchsia-default-arguments-calls)

return std::forward<W>(w);
}
Expand Down Expand Up @@ -88,8 +87,8 @@ class gemv_iterator {
}
template<class It1DOut>
friend auto copy_n(gemv_iterator first, difference_type count, It1DOut result){
if constexpr(std::is_same_v<Context, void>) {blas::gemv_n( first.alpha_, first.m_it_, count, first.v_first_, Scalar{0.0}, result);} // NOLINT(fuchsia-default-arguments-calls)
else {blas::gemv_n(first.ctxt_, first.alpha_, first.m_it_, count, first.v_first_, Scalar{0.0}, result);} // NOLINT(fuchsia-default-arguments-calls)
if constexpr(std::is_same_v<Context, void>) {blas::gemv_n( static_cast<value_type>(first.alpha_), first.m_it_, count, first.v_first_, Scalar{0.0}, result);} // NOLINT(fuchsia-default-arguments-calls)
else {blas::gemv_n(first.ctxt_, static_cast<value_type>(first.alpha_), first.m_it_, count, first.v_first_, Scalar{0.0}, result);} // NOLINT(fuchsia-default-arguments-calls)
return result + count;
}
template<class It1DOut>
Expand Down Expand Up @@ -149,7 +148,7 @@ class gemv_range {
friend auto operator+(gemv_range const& self) {return self.decay();}
template<class V>
friend auto operator+=(V&& v, gemv_range const& s) -> V&& { // NOLINT(readability-identifier-length) BLAS naming
blas::gemv_n(s.ctxt_, s.alpha_, s.m_begin_, s.m_end_ - s.m_begin_, s.v_first_, static_cast<Scalar>(1.0), v.begin());
blas::gemv_n(s.ctxt_, static_cast<Scalar>(s.alpha_), s.m_begin_, s.m_end_ - s.m_begin_, s.v_first_, static_cast<Scalar>(1.0), v.begin());
return std::forward<V>(v);
}
};
Expand Down

0 comments on commit 15548ed

Please sign in to comment.