E.V.E
v2023.02.15
Loading...
Searching...
No Matches
◆
dot
eve::dot = functor<dot_t>
inline
constexpr
Warning
This is not a reduction ! For reals the dot product is the product
Header file
#include <eve/module/core.hpp>
Callable Signatures
namespace
eve
{
// Regular overloads
constexpr
auto
dot
(
auto
value
...
xs
,
auto
value
...
ys
)
noexcept
;
// 1
constexpr
auto
dot
(kumi::tuple
xs
, kumi::tuple
ys
)
noexcept
;
// 2
// Semantic options
constexpr
auto
dot
[widen](
/*any of the above overloads*/
)
noexcept
;
// 3
}
eve::value
The concept value<T> is satisfied if and only if T satisfies either eve::scalar_value or eve::simd_va...
Definition
value.hpp:34
eve::dot
constexpr auto dot
elementwise_callable object computing the elementwise dot product of the vector of the first half par...
Definition
dot.hpp:88
eve::translate_t
typename decltype(detail::as_translated_type(as< T >{}))::type translate_t
Returns the final translated type of T.
Definition
translation.hpp:107
eve
EVE Main Namespace.
Definition
abi.hpp:19
Parameters
xs
,
ys
:
floating value arguments
or tuples of them.
c
:
Conditional expression
masking the operation.
m
:
Logical value
masking the operation.
Return value
dot product. \(\sum_s x_s*y_s\).
use the content of the tuples
The summation is computed in the double sized element type (if available). This decorator has no effect on double and 64 bits integrals.
Example
// revision 0
#include <eve/module/core.hpp>
#include <iostream>
int
main
()
{
eve::wide
wf0
{0.0, 1.0, 2.0, 3.0, -1.0, -2.0, -3.0, -4.0};
eve::wide
wf1
{0.0, -4.0, 1.0, -1.0, 2.0, -2.0, 3.0, -3.0};
eve::wide
wi0
{0, 1, 2, 3, -1, -2, -3, -4};
eve::wide
wi1
{0, -4, 1, -1, 2, -2, 3, -3};
eve::wide
wu0
{0
u
, 1u, 2u, 3u, 4u, 5u, 6u, 7u};
eve::wide
wu1
{7u, 6u, 5u, 4u, 3u, 2u, 1u, 0
u
};
std::cout <<
"<- wf0 = "
<<
wf0
<<
"\n"
;
std::cout <<
"<- wf1 = "
<<
wf1
<<
"\n"
;
std::cout <<
"<- wi0 = "
<<
wi0
<<
"\n"
;
std::cout <<
"<- wi1 = "
<<
wi1
<<
"\n"
;
std::cout <<
"<- wu0 = "
<<
wu0
<<
"\n"
;
std::cout <<
"<- wu1 = "
<<
wu1
<<
"\n"
;
std::cout <<
"-> dot(wf0, wf1) = "
<<
eve::dot
(
wf0
,
wf1
) <<
"\n"
;
std::cout <<
"-> dot(wu0, wu1) = "
<<
eve::dot
(
wu0
,
wu1
) <<
"\n"
;
std::cout <<
"-> dot(wi0, wi1) = "
<<
eve::dot
(
wi0
,
wi1
) <<
"\n"
;
std::cout <<
"-> dot(wf0, wf1, wf0, wf1) = "
<<
eve::dot
(
wf0
,
wf1
,
wf0
,
wf1
) <<
"\n"
;
std::cout <<
"-> dot[kahan](wf0, wf1, wf0, wf1) = "
<<
eve::dot
[eve::kahan](
wf0
,
wf1
,
wf0
,
wf1
) <<
"\n"
;
std::cout <<
"-> dot[widen](wf0, wf1, wf0, wf1) = "
<<
eve::dot
[eve::widen](
wf0
,
wf1
,
wf0
,
wf1
) <<
"\n"
;
auto
vwf0
= kumi::tuple{
wf0
, 2*
wf0
, 3*
wf0
};
auto
vwf1
= kumi::tuple{
wf1
, 2*
wf1
, 3*
wf1
};
std::cout <<
"-> dot(vwf0, vwf1) = "
<<
eve::dot
(
vwf0
,
vwf1
) <<
"\n"
;
std::cout <<
"-> dot[widen](vwf0, vwf1) = "
<<
eve::dot
[eve::widen](
vwf0
,
vwf1
) <<
"\n"
;
std::cout <<
"-> dot[kahan](vwf0, vwf1) = "
<<
eve::dot
[eve::kahan](
vwf0
,
vwf1
) <<
"\n"
;
}
eve::wide
Wrapper for SIMD registers.
Definition
wide.hpp:94
eve