Skip to content
GitLab
Menu
Why GitLab
Pricing
Contact Sales
Explore
Why GitLab
Pricing
Contact Sales
Explore
Sign in
Get free trial
Changes
Page history
Update BLAS
authored
Mar 23, 2023
by
Alfredo Correa
Show whitespace changes
Inline
Side-by-side
BLAS.md
View page @
21d6bfb6
...
...
@@ -27,4 +27,4 @@ All these operations are now supported for CPU and GPU memory, real and complex.
| |
`blas::gemm(aa, blas::H(A), B, bb, C)`
| $
`C_{ij} \leftarrow \alpha \sum_k \bar A_{ki} B_{kj} + \beta C_{ij}`
$ |
`CC=~*A *B`
|
`C=blas::gemm(aa, blas::H(A), B)`
|
`transform(begin(transposed(A)), end(transposed(A)), begin(CC), begin(CC), [BT=transposed(B)](auto const& Ac, auto&& Cr) {transform(begin(BT), end(BT), begin(Cr), begin(Cr), [&Ac](auto const& Bc, auto&& c){return aa*blas::dot(blas::C(Ac), Bc) + bb*c;}); return move(Cr);})`
|
| |
`blas::gemm(aa, blas::H(A), blas::H(B), bb, C)`
| $
`C_{ij} \leftarrow \alpha \sum_k \bar A_{ki} \bar B_{jk} + \beta C_{ij}`
$ |
`CC=~*A * ~*B`
|
`C=blas::gemm(aa, blas::H(A), blas::H(B))`
|
`transform(begin(transposed(A)), end(transposed(A)), begin(CC), begin(CC), [&B](auto const& Ac, auto&& Cr) {transform(begin(B), end(B), begin(Cr), begin(Cr), [&Ac](auto const& Bc, auto&& c) {return conj(std::transform_reduce(begin(Ac), end(Ac), begin(Bc), 0.0*c, std::plus<>{}, [](auto const& a, auto const& b) {return a*b;}));}); return move(Cr);})`
|
| |
`blas::gemm(aa, blas::T(A), blas::H(B), bb, C)`
| $
`C_{ij} \leftarrow \alpha \sum_k A_{ki} \bar B_{jk} + \beta C_{ij}`
$ |
`CC=~A * ~*B`
|
`C=blas::gemm(aa, blas::T(A), blas::H(B))`
|
`transform(begin(transposed(A)), end(transposed(A)), begin(CC), begin(CC), [&B](auto const& Ac, auto&& Cr) {transform(begin(B), end(B), begin(Cr), begin(Cr), [&Ac](auto const& Bc, auto&& c) {return std::transform_reduce(begin(Ac), end(Ac), begin(Bc), 0.0*c, std::plus<>{}, [](auto const& a, auto const& b) {return a*conj(b);});}); return move(Cr);})`
|
| |
`blas::gemm(aa, blas::H(A), blas::T(B), bb, C)`
| $
`C_{ij} \leftarrow \alpha \sum_k \bar A_{ki} B_{jk} + \beta C_{ij}`
$
|
`CC=~*A * ~B`
|
`C=blas::gemm(aa, blas::H(A), blas::T(B))`
|
`transform(begin(transposed(A)), end(transposed(A)), begin(CC), begin(CC), [&B](auto const& Ac, auto&& Cr) {transform(begin(B), end(B), begin(Cr), begin(Cr), [&Ac](auto const& Bc, auto&& c) {return std::transform_reduce(begin(Ac), end(Ac), begin(Bc), 0.0*c, std::plus<>{}, [](auto const& a, auto const& b) {return conj(a)*b;});}); return move(Cr);})`
|
| |
~~
`blas::gemm(aa, blas::H(A), blas::T(B), bb, C)`
~~
| $
`C_{ij} \leftarrow \alpha \sum_k \bar A_{ki} B_{jk} + \beta C_{ij}`
$
(not BLAS-implemented) | |
|
`transform(begin(transposed(A)), end(transposed(A)), begin(CC), begin(CC), [&B](auto const& Ac, auto&& Cr) {transform(begin(B), end(B), begin(Cr), begin(Cr), [&Ac](auto const& Bc, auto&& c) {return std::transform_reduce(begin(Ac), end(Ac), begin(Bc), 0.0*c, std::plus<>{}, [](auto const& a, auto const& b) {return conj(a)*b;});}); return move(Cr);})`
|