planc
Parallel Lowrank Approximation with Non-negativity Constraints
Functions
dimtrees.hpp File Reference
#include "dimtree/ddttensor.hpp"
#include "dimtree/dimtrees.h"

Go to the source code of this file.

Functions

void partial_MTTKRP (Output_Layout OL, long int s, direction D, tensor *T, double *A, long int r, double *C, long int num_threads)
 Performs a tensor times a matrix based on some split of dimensions. More...
 
void partial_MTTKRP_with_KRP (Output_Layout OL, long int s, direction D, ktensor *Y, tensor *T, double *C, long int num_threads)
 Wrapper function for partial_MTTKRP() Forms a desired KRP, manages all the memory for the KRP Passes the KRP as the argument double * A for partial_MTTKRP() 1) output format 2) s 3) D 4) Y, ktensor 5) T, data tensor 6) C, output matrix 7) num_threads. More...
 
void partial_MTTKRP_with_KRP_output_FM (direction D, ktensor *Y, tensor *T, long int num_threads)
 
 partial_MTTKRP_with_KRP_output_FM();
 Wrapper function for computing a partial_MTTKRP with KRP and outputing a

(Row_Major) factor matrix. More...

 
void partial_MTTKRP_with_KRP_output_T (long int s, direction D, ktensor *input_ktensor, tensor *input_tensor, tensor *output_tensor, long int num_threads)
 
 partial_MTTKRP_with_KRP_output_T()
 Wrapper function for computing partial_MTTKRP with KRP and outputing a

tensor. More...

 
void multi_TTV (Output_Layout OL, long int s, direction D, tensor *T, double *A, long int r, double *C, long int num_threads)
 
 multi_TTV();
 performs a multi_ttv with between subtensors of T->data and the column

of the matrix A. More...

 
void multi_TTV_with_KRP (Output_Layout OL, long int s, direction D, tensor *T, ktensor *Y, double *C, long int num_threads)
 multi_TTV_with_KRP(); KRP wrapper for the general multi_TTV function. More...
 
void multi_TTV_with_KRP_output_FM (direction D, tensor *input_tensor, ktensor *input_ktensor, long int num_threads)
 
 multi_TTV_with_KRP_output_FM();
 Wrapper function for performing a multi_TTV with a KRP and outputing a

(RowMajor) factor matrix. More...

 
void multi_TTV_with_KRP_output_T (long int s, direction D, tensor *input_tensor, ktensor *input_ktensor, tensor *output_tensor, long int num_threads)
 

Function Documentation

◆ multi_TTV()

void multi_TTV ( Output_Layout  OL,
long int  s,
direction  D,
tensor *  T,
double *  A,
long int  r,
double *  C,
long int  num_threads 
)

 multi_TTV();
 performs a multi_ttv with between subtensors of T->data and the column

of the matrix A.

Outputs to the matrix/tensor C. 1) OL, output_Layout 2) D, direction 3) s, the split point 4) T, tensor 5) A, ttv the columns of this matrix with the tensor 6) r, columns in A 7) C, output matrix 8) num_threads

 1) dgemv_layout
 2) trans_tensor
 3) m, rows of T->data chunk
 4) n, cols of T->data chunk
 5) alpha
 6) T->data + i * m * n, i * size of chunk
 7) tensor_stride, stride of a tensor chunk
 8) A[i], start of the ith column of a
 9) r, stride of A
 10) beta
 11) C + i * output_col_stride, starting point of the ith col of C
 12) output_stride, distance between elements of the output vector
 print_dgemv_inputs( dgemv_layout, trans_tensor, m, n, alpha, i*m*n,

tensor_stride, i, r, beta, output_col_stride, output_stride );

Definition at line 315 of file dimtrees.hpp.

◆ multi_TTV_with_KRP()

void multi_TTV_with_KRP ( Output_Layout  OL,
long int  s,
direction  D,
tensor *  T,
ktensor *  Y,
double *  C,
long int  num_threads 
)

multi_TTV_with_KRP(); KRP wrapper for the general multi_TTV function.

Forms a desired KRP and passes it to the multi_TTv function, manages all memory related to the KRP.

Definition at line 418 of file dimtrees.hpp.

◆ multi_TTV_with_KRP_output_FM()

void multi_TTV_with_KRP_output_FM ( direction  D,
tensor *  input_tensor,
ktensor *  input_ktensor,
long int  num_threads 
)

 multi_TTV_with_KRP_output_FM();
 Wrapper function for performing a multi_TTV with a KRP and outputing a

(RowMajor) factor matrix.

This should be used on edges leading to leave of the tree. 1) D, direction to contract 2) input_tensor, tensor to contract 3) input_ktensor, factor matrices from which to form the KRP 4) num_threads

Definition at line 464 of file dimtrees.hpp.

◆ multi_TTV_with_KRP_output_T()

void multi_TTV_with_KRP_output_T ( long int  s,
direction  D,
tensor *  input_tensor,
ktensor *  input_ktensor,
tensor *  output_tensor,
long int  num_threads 
)

Definition at line 481 of file dimtrees.hpp.

◆ partial_MTTKRP()

void partial_MTTKRP ( Output_Layout  OL,
long int  s,
direction  D,
tensor *  T,
double *  A,
long int  r,
double *  C,
long int  num_threads 
)

Performs a tensor times a matrix based on some split of dimensions.

Partial MTTKRP functions.

  • Assumptions
    • dimensions splits must be contiguous
    • you can only multiply by a row major matrix
    • tensors are column major in the first matricization
  • Cases
    • multiply on the left
    • multiply on the right
    • output matrix is row major
    • output matrix is col major
  • Inputs
    • OL, Output_Layout, specifies if the output should be row or col major
    • s, a split dimension index, s is included in the left side
    • D, specifies which side of s will be the leading dimensions of the matricized tensor
    • r, specifies the number of columns in A
    • T, a tensor to multiply by
    • A, a matrix to multiply against the tensor
    • C, an output matrix
 cblas_dgemm();
 1) dgemm_layout, controls the layout of the output matrix
 2) trans_tensor, balances dgemm_layout with contracting over left or

right modes 3) trans_A, balanes dgemm_layout with the assumption A is always in row major ordering 4) m, rows of T->data 5) r, columns of A 6) k, common dimensions being contracted over 7) alpha 8) T->data, tensor data 9) k, stride of T->data 10) A, a row major matrix 11) r, stride of A 12) beta 13) C, output matrix 14) output_stride print_dgemm_inputs( dgemm_layout, trans_tensor, trans_A, m, r, k, alpha, k, r, beta, output_stride );

Definition at line 31 of file dimtrees.hpp.

◆ partial_MTTKRP_with_KRP()

void partial_MTTKRP_with_KRP ( Output_Layout  OL,
long int  s,
direction  D,
ktensor *  Y,
tensor *  T,
double *  C,
long int  num_threads 
)

Wrapper function for partial_MTTKRP() Forms a desired KRP, manages all the memory for the KRP Passes the KRP as the argument double * A for partial_MTTKRP() 1) output format 2) s 3) D 4) Y, ktensor 5) T, data tensor 6) C, output matrix 7) num_threads.

partial_MTTKRP(); 1) OL, specified output layuout 2) s, dimension being split over 3) Y->rank, number of columns in the KRP 4) T, data tensor 5) KRP, matrix to multiply into the data tensor 6) C, output matrix C 7) num_threads

Definition at line 176 of file dimtrees.hpp.

◆ partial_MTTKRP_with_KRP_output_FM()

void partial_MTTKRP_with_KRP_output_FM ( direction  D,
ktensor *  Y,
tensor *  T,
long int  num_threads 
)

 partial_MTTKRP_with_KRP_output_FM();
 Wrapper function for computing a partial_MTTKRP with KRP and outputing a

(Row_Major) factor matrix.

This function should always be used on edges that lead to leaves of the tree. D tells you s

 1) direction D
 2) tensor T
 3) ktensor K, the full ktensor
 4) num_threads

1) RowMajor, output is a factor matrix 2) s, determined above based on hte direction 3) Y, k tensor corresponding to the original data tensor 4) T, the original data tensor, this is a PM 5) Y->factors[n], output to the factor matrix 6) num_threads

Definition at line 250 of file dimtrees.hpp.

◆ partial_MTTKRP_with_KRP_output_T()

void partial_MTTKRP_with_KRP_output_T ( long int  s,
direction  D,
ktensor *  input_ktensor,
tensor *  input_tensor,
tensor *  output_tensor,
long int  num_threads 
)

 partial_MTTKRP_with_KRP_output_T()
 Wrapper function for computing partial_MTTKRP with KRP and outputing a

tensor.

This function should be used on edges of the tree that lead to non-leaf nodes. 1) s, split point 2) D, direction 3) input_ktensor, ktnesor whose factor matrices to are used to form the KRP 4) input_tensor, tensor to contract 5) output_tensor 6) num_threads

Definition at line 281 of file dimtrees.hpp.