36 lines
1.2 KiB
C
36 lines
1.2 KiB
C
|
#ifndef INCLUDE_GUARD_MLM_H
|
||
|
#define INCLUDE_GUARD_MLM_H
|
||
|
|
||
|
/**
|
||
|
* Multi Linear Multiplication
|
||
|
*
|
||
|
* C = alpha A x_modes[0] op(Bs[0]) ... x_modes[nrhs] op(Bs[nrhs]) + beta C
|
||
|
*
|
||
|
* @param trans boolean vector of length `nrhs` indicating if `i`th RHS matrix
|
||
|
* is to be transposed. That is `op(Bs[i])` is the transposed of `Bs[i]` iff
|
||
|
* `trans[i]` is true, otherwise no-op on `Bs[i]`. Can be `NULL`, then `op` is
|
||
|
* always the identity.
|
||
|
* @param modes integer vector of length `nrhs` specifying the product modes.
|
||
|
*
|
||
|
* @todo TODO: continue doc. !!!
|
||
|
*
|
||
|
* @param alpha scaling factor
|
||
|
* @param beta scaling factor
|
||
|
* @param C output memory addr.
|
||
|
*
|
||
|
* @param work_mem NULL or temporary working memory of size
|
||
|
* `2 * prod(pmax(dim(A), dim(C))) + ord`
|
||
|
*/
|
||
|
int mlm(
|
||
|
/* options */ const int* trans, const int* modes, const int nrhs,
|
||
|
/* dims */ const int* dimA, const int* dimC, const int ord,
|
||
|
/* scalars */ const double alpha,
|
||
|
/* tensor */ const double* A,
|
||
|
/* matrices */ const double** Bs, const int* ldBs,
|
||
|
/* scalar */ const double beta,
|
||
|
/* tensor */ double* C,
|
||
|
double* work_mem
|
||
|
);
|
||
|
|
||
|
#endif /* INCLUDE_GUARD_MLM_H */
|