Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 41 additions & 41 deletions include/experimental/__p1673_bits/blas1_dot.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,27 +54,27 @@ struct is_custom_dot_avail<


template<class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2,
class Scalar>
Scalar dot(
impl::inline_exec_t&& /* exec */,
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2,
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2,
Scalar init)
{
static_assert(v1.static_extent(0) == dynamic_extent ||
v2.static_extent(0) == dynamic_extent ||
v1.static_extent(0) == v2.static_extent(0));

using size_type = std::common_type_t<SizeType1, SizeType2>;
using size_type = std::common_type_t<IndexType1, IndexType2>;
for (size_type k = 0; k < v1.extent(0); ++k) {
init += v1(k) * v2(k);
}
Expand All @@ -83,20 +83,20 @@ Scalar dot(

template<class ExecutionPolicy,
class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2,
class Scalar>
Scalar dot(
ExecutionPolicy&& exec ,
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2,
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2,
Scalar init)
{
static_assert(v1.static_extent(0) == dynamic_extent ||
Expand All @@ -116,58 +116,58 @@ Scalar dot(
}

template<class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2,
class Scalar>
Scalar dot(mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2,
Scalar dot(mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2,
Scalar init)
{
return dot(impl::default_exec_t{}, v1, v2, init);
}

template<class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2,
class Scalar>
Scalar dotc(
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2,
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2,
Scalar init)
{
return dot(conjugated(v1), v2, init);
}

template<class ExecutionPolicy,
class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2,
class Scalar>
Scalar dotc(
ExecutionPolicy&& exec,
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2,
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2,
Scalar init)
{
return dot(exec, conjugated(v1), v2, init);
Expand All @@ -180,35 +180,35 @@ namespace dot_detail {
// without exposing "using std::abs" in the outer namespace.
template<
class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2>
auto dot_return_type_deducer(
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> x,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> y)
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> x,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> y)
-> decltype(x(0) * y(0));
} // namespace dot_detail


template<class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2>
auto dot(
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2)
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2)
-> decltype(dot_detail::dot_return_type_deducer(v1, v2))
{
using return_t = decltype(dot_detail::dot_return_type_deducer(v1, v2));
Expand All @@ -217,38 +217,38 @@ auto dot(

template<class ExecutionPolicy,
class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2>
auto dot(
ExecutionPolicy&& exec,
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2)
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2)
-> decltype(dot_detail::dot_return_type_deducer(v1, v2))
{
using return_t = decltype(dot_detail::dot_return_type_deducer(v1, v2));
return dot(exec, v1, v2, return_t{});
}

template<class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2>
auto dotc(
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2)
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2)
-> decltype(dot_detail::dot_return_type_deducer(conjugated(v1), v2))
{
using return_t = decltype(dot_detail::dot_return_type_deducer(conjugated(v1), v2));
Expand All @@ -257,19 +257,19 @@ auto dotc(

template<class ExecutionPolicy,
class ElementType1,
class SizeType1,
class IndexType1,
::std::size_t ext1,
class Layout1,
class Accessor1,
class ElementType2,
class SizeType2,
class IndexType2,
::std::size_t ext2,
class Layout2,
class Accessor2>
auto dotc(
ExecutionPolicy&& exec,
mdspan<ElementType1, extents<SizeType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<SizeType2, ext2>, Layout2, Accessor2> v2)
mdspan<ElementType1, extents<IndexType1, ext1>, Layout1, Accessor1> v1,
mdspan<ElementType2, extents<IndexType2, ext2>, Layout2, Accessor2> v2)
-> decltype(dot_detail::dot_return_type_deducer(conjugated(v1), v2))
{
using return_t = decltype(dot_detail::dot_return_type_deducer(conjugated(v1), v2));
Expand Down
Loading
Loading