34 const idx_t n = (
trans == Op::NoTrans) ?
A.nrows() :
A.ncols();
35 const idx_t
k = (
trans == Op::NoTrans) ?
A.ncols() :
A.nrows();
36 const idx_t nx = (
trans == Op::NoTrans) ?
A.get_nx() :
A.get_ny();
37 const idx_t ny = (
trans == Op::NoTrans) ?
A.get_ny() :
A.get_nx();
45 uplo != Uplo::General);
55 if (
trans == Op::NoTrans) {
56 for (idx_t ix = 0; ix < nx; ++ix) {
59 beta,
C.tile(ix, ix));
60 for (idx_t iy = 1; iy < ny; ++iy)
61 starpu::insert_task_herk<TA, TC>(
65 auto Ai =
A.get_const_tiles(ix, 0, 1, ny);
66 auto Bi =
A.get_const_tiles(ix + 1, 0, nx - ix - 1, ny);
67 if (
uplo == Uplo::Upper ||
uplo == Uplo::General) {
68 auto Ci =
C.get_tiles(ix, ix + 1, 1, nx - ix - 1);
71 if (
uplo == Uplo::Lower ||
uplo == Uplo::General) {
72 auto Ci =
C.get_tiles(ix + 1, ix, nx - ix - 1, 1);
78 for (idx_t ix = 0; ix < nx; ++ix) {
81 beta,
C.tile(ix, ix));
82 for (idx_t iy = 1; iy < ny; ++iy)
83 starpu::insert_task_herk<TA, TC>(
87 auto Ai =
A.get_const_tiles(0, ix, ny, 1);
88 auto Bi =
A.get_const_tiles(0, ix + 1, ny, nx - ix - 1);
89 if (
uplo == Uplo::Upper ||
uplo == Uplo::General) {
90 auto Ci =
C.get_tiles(ix, ix + 1, 1, nx - ix - 1);
93 if (
uplo == Uplo::Lower ||
uplo == Uplo::General) {
94 auto Ci =
C.get_tiles(ix + 1, ix, nx - ix - 1, 1);
void herk(Uplo uplo, Op trans, const alpha_t &alpha, const matrixA_t &A, const beta_t &beta, matrixC_t &C)
Hermitian rank-k update:
Definition herk.hpp:68
void gemm(Op transA, Op transB, const alpha_t &alpha, const matrixA_t &A, const matrixB_t &B, const beta_t &beta, matrixC_t &C)
General matrix-matrix multiply:
Definition gemm.hpp:61
#define tlapack_check_false(cond)
Throw an error if cond is true.
Definition exceptionHandling.hpp:113
typename traits::real_type_traits< Types..., int >::type real_type
The common real type of the list of types.
Definition scalar_type_traits.hpp:113