Cyclops Tensor Framework
parallel arithmetic on multidimensional arrays
CTF::Matrix< dtype > Class Template Reference

Matrix class which encapsulates a 2D tensor. More...

#include <matrix.h>

Inheritance diagram for CTF::Matrix< dtype >:
Collaboration diagram for CTF::Matrix< dtype >:

Public Member Functions

 Matrix ()
 default constructor for a matrix More...
 
 Matrix (Matrix< dtype > const &A)
 copy constructor for a matrix More...
 
 Matrix (Tensor< dtype > const &A)
 casts a tensor to a matrix More...
 
 Matrix (int nrow, int ncol, World &wrld, CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, int profile=0)
 constructor for a matrix More...
 
 Matrix (int nrow, int ncol, World &wrld, char const *name, int profile=0, CTF_int::algstrct const &sr=Ring< dtype >())
 constructor for a matrix More...
 
 Matrix (int nrow, int ncol, int atr=0, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, int profile=0)
 constructor for a matrix More...
 
 Matrix (int nrow, int ncol, int atr, World &wrld, char const *name, int profile=0, CTF_int::algstrct const &sr=Ring< dtype >())
 constructor for a matrix More...
 
 Matrix (int nrow, int ncol, char const *idx, Idx_Partition const &prl, Idx_Partition const &blk=Idx_Partition(), int atr=0, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, int profile=0)
 constructor for a matrix with a given initial cyclic distribution More...
 
void write_mat (int mb, int nb, int pr, int pc, int rsrc, int csrc, int lda, dtype const *data)
 writes a nonsymmetric matrix from a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix) More...
 
 Matrix (int nrow, int ncol, int mb, int nb, int pr, int pc, int rsrc, int csrc, int lda, dtype const *data, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, int profile=0)
 constructor for a nonsymmetric matrix with a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix) More...
 
 Matrix (int const *desc, dtype const *data, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, int profile=0)
 construct Matrix from ScaLAPACK array descriptor `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix) More...
 
void read_mat (int mb, int nb, int pr, int pc, int rsrc, int csrc, int lda, dtype *data)
 reads a nonsymmetric matrix into a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix) More...
 
void get_desc (int &ictxt, int *&desc)
 get a ScaLAPACK descriptor for this Matrix, will always be in pure cyclic layout More...
 
void read_mat (int const *desc, dtype *data)
 read Matrix into ScaLAPACK array descriptor `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix) More...
 
void print_matrix ()
 
void qr (Matrix< dtype > &Q, Matrix< dtype > &R)
 
void svd (Matrix< dtype > &U, Vector< dtype > &S, Matrix< dtype > &VT, int rank=0)
 
- Public Member Functions inherited from CTF::Tensor< dtype >
 Tensor ()
 default constructor More...
 
 Tensor (int order, int const *len, int const *sym, World &wrld=get_universe(), char const *name=NULL, bool profile=0, CTF_int::algstrct const &sr=Ring< dtype >())
 defines tensor filled with zeros on the default algstrct More...
 
 Tensor (int order, int const *len, int const *sym, World &wrld, CTF_int::algstrct const &sr, char const *name=NULL, bool profile=0)
 defines a tensor filled with zeros on a specified algstrct More...
 
 Tensor (int order, int const *len, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, bool profile=0)
 defines a nonsymmetric tensor filled with zeros on a specified algstrct More...
 
 Tensor (int order, bool is_sparse, int const *len, int const *sym, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, bool profile=0)
 defines a (sparse) tensor on a specified algstrct More...
 
 Tensor (int order, bool is_sparse, int const *len, World &wrld=get_universe(), CTF_int::algstrct const &sr=Ring< dtype >(), char const *name=NULL, bool profile=0)
 defines a nonsymmetric tensor filled with zeros on a specified algstrct More...
 
 Tensor (Tensor< dtype > const &A)
 copies a tensor, copying the data of A More...
 
 Tensor (tensor const &A)
 copies a tensor, copying the data of A (same as above) More...
 
 Tensor (bool copy, tensor const &A)
 copies a tensor (setting data to zero or copying A) More...
 
 Tensor (tensor &A, int const *new_sym)
 repacks the tensor other to a different symmetry (assumes existing data contains the symmetry and keeps only values with indices in increasing order) WARN: LIMITATION: new_sym must cause unidirectional structural changes, i.e. {NS,NS}->{SY,NS} OK, {SY,NS}->{NS,NS} OK, {NS,NS,SY,NS}->{SY,NS,NS,NS} NOT OK! More...
 
 Tensor (tensor const &A, World &wrld)
 creates a zeroed out copy (data not copied) of a tensor in a different world More...
 
 Tensor (int order, int const *len, int const *sym, World &wrld, char const *idx, Idx_Partition const &prl, Idx_Partition const &blk=Idx_Partition(), char const *name=NULL, bool profile=0, CTF_int::algstrct const &sr=Ring< dtype >())
 defines tensor filled with zeros on the default algstrct on a user-specified distributed layout More...
 
 Tensor (int order, bool is_sparse, int const *len, int const *sym, World &wrld, char const *idx, Idx_Partition const &prl, Idx_Partition const &blk=Idx_Partition(), char const *name=NULL, bool profile=0, CTF_int::algstrct const &sr=Ring< dtype >())
 defines tensor filled with zeros on the default algstrct on a user-specified distributed layout More...
 
Typ_Idx_Tensor< dtype > operator[] (char const *idx_map)
 associated an index map with the tensor for future operation More...
 
Typ_Idx_Tensor< dtype > i (char const *idx_map)
 
void read (int64_t npair, Pair< dtype > *pairs)
 Gives the values associated with any set of indices. More...
 
void read (int64_t npair, int64_t const *global_idx, dtype *data)
 Gives the values associated with any set of indices The sparse data is defined in coordinate format. The tensor index (i,j,k,l) of a tensor with edge lengths {m,n,p,q} is associated with the global index g via the formula g=i+j*m+k*m*n+l*m*n*p. The row index is first and the column index is second for matrices, which means they are column major. More...
 
void read (int64_t npair, dtype alpha, dtype beta, Pair< dtype > *pairs)
 sparse read with accumulation: pairs[i].d = alpha*A[pairs[i].k]+beta*pairs[i].d More...
 
void read (int64_t npair, dtype alpha, dtype beta, int64_t const *global_idx, dtype *data)
 sparse read with accumulation: data[i] = alpha*A[global_idx[i]]+beta*data[i] More...
 
void get_local_data (int64_t *npair, int64_t **global_idx, dtype **data, bool nonzeros_only=false, bool unpack_sym=false) const
 Gives the global indices and values associated with the local data. More...
 
void read_local (int64_t *npair, int64_t **global_idx, dtype **data, bool unpack_sym=false) const
 Using get_local_data(), which returns an array that must be freed with delete [], is more efficient, this version exists for backwards compatibility. gives the global indices and values associated with the local data WARNING-1: for sparse tensors this includes the zeros to maintain consistency with the behavior for dense tensors, use get_local_pairs to get only nonzeros. More...
 
void get_local_pairs (int64_t *npair, Pair< dtype > **pairs, bool nonzeros_only=false, bool unpack_sym=false) const
 gives the global indices and values associated with the local data More...
 
void read_local (int64_t *npair, Pair< dtype > **pairs, bool unpack_sym=false) const
 gives the global indices and values associated with the local data WARNING: for sparse tensors this includes the zeros to maintain consistency with the behavior for dense tensors, use get_lcoal_pairs to get only nonzeros More...
 
void get_all_data (int64_t *npair, dtype **data, bool unpack=false)
 collects the entire tensor data on each process (not memory scalable) More...
 
void read_all (int64_t *npair, dtype **data, bool unpack=false)
 collects the entire tensor data on each process (not memory scalable) More...
 
int64_t read_all (dtype *data, bool unpack=false)
 collects the entire tensor data on each process (not memory scalable) More...
 
void write (int64_t npair, int64_t const *global_idx, dtype const *data)
 writes in values associated with any set of indices The sparse data is defined in coordinate format. The tensor index (i,j,k,l) of a tensor with edge lengths {m,n,p,q} is associated with the global index g via the formula g=i+j*m+k*m*n+l*m*n*p. The row index is first and the column index is second for matrices, which means they are column major. More...
 
void write (int64_t npair, Pair< dtype > const *pairs)
 writes in values associated with any set of indices More...
 
void write (int64_t npair, dtype alpha, dtype beta, int64_t const *global_idx, dtype const *data)
 sparse add: A[global_idx[i]] = beta*A[global_idx[i]]+alpha*data[i] More...
 
void write (int64_t npair, dtype alpha, dtype beta, Pair< dtype > const *pairs)
 sparse add: A[pairs[i].k] = alpha*A[pairs[i].k]+beta*pairs[i].d More...
 
void contract (dtype alpha, CTF_int::tensor &A, char const *idx_A, CTF_int::tensor &B, char const *idx_B, dtype beta, char const *idx_C)
 contracts C[idx_C] = beta*C[idx_C] + alpha*A[idx_A]*B[idx_B] More...
 
void contract (dtype alpha, CTF_int::tensor &A, char const *idx_A, CTF_int::tensor &B, char const *idx_B, dtype beta, char const *idx_C, Bivar_Function< dtype > fseq)
 contracts computes C[idx_C] = beta*C[idx_C] fseq(alpha*A[idx_A],B[idx_B]) More...
 
void sum (dtype alpha, CTF_int::tensor &A, char const *idx_A, dtype beta, char const *idx_B)
 sums B[idx_B] = beta*B[idx_B] + alpha*A[idx_A] More...
 
void sum (dtype alpha, CTF_int::tensor &A, char const *idx_A, dtype beta, char const *idx_B, Univar_Function< dtype > fseq)
 sums B[idx_B] = beta*B[idx_B] + fseq(alpha*A[idx_A]) More...
 
void scale (dtype alpha, char const *idx_A)
 scales A[idx_A] = alpha*A[idx_A] More...
 
void scale (dtype alpha, char const *idx_A, Endomorphism< dtype > fseq)
 scales A[idx_A] = fseq(alpha*A[idx_A]) More...
 
dtype * get_mapped_data (char const *idx, Idx_Partition const &prl, Idx_Partition const &blk=Idx_Partition(), bool unpack=true)
 returns local data of tensor with parallel distribution prl and local blocking blk More...
 
void write (char const *idx, dtype const *data, Idx_Partition const &prl, Idx_Partition const &blk=Idx_Partition(), bool unpack=true)
 writes data to tensor from parallel distribution prl and local blocking blk More...
 
double estimate_time (CTF_int::tensor &A, char const *idx_A, CTF_int::tensor &B, char const *idx_B, char const *idx_C)
 estimate the time of a contraction C[idx_C] = A[idx_A]*B[idx_B] More...
 
double estimate_time (CTF_int::tensor &A, char const *idx_A, char const *idx_B)
 estimate the time of a sum B[idx_B] = A[idx_A] More...
 
Tensor< dtype > slice (int const *offsets, int const *ends) const
 cuts out a slice (block) of this tensor A[offsets,ends) result will always be fully nonsymmetric More...
 
Tensor< dtype > slice (int64_t corner_off, int64_t corner_end) const
 cuts out a slice (block) of this tensor with corners specified by global index result will always be fully nonsymmetric More...
 
Tensor< dtype > slice (int const *offsets, int const *ends, World *oworld) const
 cuts out a slice (block) of this tensor A[offsets,ends) result will always be fully nonsymmetric More...
 
Tensor< dtype > slice (int64_t corner_off, int64_t corner_end, World *oworld) const
 cuts out a slice (block) of this tensor with corners specified by global index result will always be fully nonsymmetric More...
 
void slice (int const *offsets, int const *ends, dtype beta, CTF_int::tensor const &A, int const *offsets_A, int const *ends_A, dtype alpha)
 adds to a slice (block) of this tensor = B B[offsets,ends)=beta*B[offsets,ends) + alpha*A[offsets_A,ends_A) More...
 
void slice (int64_t corner_off, int64_t corner_end, dtype beta, CTF_int::tensor const &A, int64_t corner_off_A, int64_t corner_end_A, dtype alpha)
 adds to a slice (block) of this tensor = B B[offsets,ends)=beta*B[offsets,ends) + alpha*A[offsets_A,ends_A) More...
 
void permute (dtype beta, CTF_int::tensor &A, int *const *perms_A, dtype alpha)
 Apply permutation to matrix, potentially extracting a slice B[i,j,...] = beta*B[...] + alpha*A[perms_A[0][i],perms_A[1][j],...]. More...
 
void permute (int *const *perms_B, dtype beta, CTF_int::tensor &A, dtype alpha)
 Apply permutation to matrix, potentially extracting a slice B[perms_B[0][i],perms_B[0][j],...] = beta*B[...] + alpha*A[i,j,...]. More...
 
void sparsify ()
 reduce tensor to sparse format, storing only nonzero data, or data above a specified threshold. makes dense tensors sparse. cleans sparse tensors of any 'computed' zeros. More...
 
void sparsify (dtype threshold, bool take_abs=true)
 reduce tensor to sparse format, storing only nonzero data, or data above a specified threshold. makes dense tensors sparse. cleans sparse tensors of any small values More...
 
void sparsify (std::function< bool(dtype)> filter)
 sparsifies tensor keeping only values v such that filter(v) = true More...
 
void read_sparse_from_file (const char *fpath, bool with_vals=true)
 read sparse tensor from file, entries of tensor must be stored one per line, as i_1 ... i_order v, to create entry T[i_1, ..., i_order] = v or as i_1 ... i_order, to create entry T[i_1, ..., i_order] = mulid More...
 
void write_sparse_to_file (const char *fpath, bool with_vals=true)
 write sparse tensor to file, entries of tensor will be stored one per line, as i_1 ... i_order v, corresponding to entry T[i_1, ..., i_order] = v or as i_1 ... i_order if with_vals =false More...
 
void add_to_subworld (Tensor< dtype > *tsr, dtype alpha, dtype beta)
 accumulates this tensor to a tensor object defined on a different world More...
 
void add_to_subworld (Tensor< dtype > *tsr)
 accumulates this tensor to a tensor object defined on a different world More...
 
void add_from_subworld (Tensor< dtype > *tsr, dtype alpha, dtype beta)
 accumulates this tensor from a tensor object defined on a different world More...
 
void add_from_subworld (Tensor< dtype > *tsr)
 accumulates this tensor from a tensor object defined on a different world More...
 
void align (CTF_int::tensor const &A)
 aligns data mapping with tensor A More...
 
dtype reduce (OP op)
 performs a reduction on the tensor More...
 
dtype norm1 ()
 computes the entrywise 1-norm of the tensor More...
 
dtype norm2 ()
 computes the frobenius norm of the tensor (needs sqrt()!) More...
 
dtype norm_infty ()
 finds the max absolute value element of the tensor More...
 
void norm1 (double &nrm)
 computes the entrywise 1-norm of the tensor More...
 
void norm2 (double &nrm)
 computes the frobenius norm of the tensor More...
 
void norm_infty (double &nrm)
 finds the max absolute value element of the tensor More...
 
dtype * get_raw_data (int64_t *size) const
 gives the raw current local data with padding included More...
 
const dtype * raw_data (int64_t *size) const
 gives a read-only copy of the raw current local data with padding included More...
 
void get_max_abs (int n, dtype *data) const
 obtains a small number of the biggest elements of the tensor in sorted order (e.g. eigenvalues) More...
 
void fill_random (dtype rmin, dtype rmax)
 fills local unique tensor elements to random values in the range [min,max] works only for dtype in {float,double,int,int64_t}, for others you can use Transform() uses mersenne twister seeded every time a global world is created (reseeded if all worlds destroyed) More...
 
void fill_sp_random (dtype rmin, dtype rmax, double frac_sp)
 generate roughly frac_sp*dense_tensor_size nonzeros between rmin and rmax, works only for dtype in {float,double,int,int64_t}, for others you can use Transform() uses mersenne twister seeded every time a global world is created (reseeded if all worlds destroyed) More...
 
void profile_on ()
 turns on profiling for tensor More...
 
void profile_off ()
 turns off profiling for tensor More...
 
void set_name (char const *name)
 sets tensor name More...
 
Tensor< dtype > & operator= (dtype val)
 sets all values in the tensor to val More...
 
Tensor< dtype > & operator= (const Tensor< dtype > A)
 sets the tensor More...
 
Sparse_Tensor< dtype > operator[] (std::vector< int64_t > indices)
 gives handle to sparse index subset of tensors More...
 
void print (FILE *fp, dtype cutoff) const
 prints tensor data to file using process 0 (modify print(...) overload in set.h if you would like a different print format) More...
 
void print (FILE *fp=stdout) const
 
void prnt () const
 
void compare (const Tensor< dtype > &A, FILE *fp=stdout, double cutoff=-1.0)
 prints two sets of tensor data side-by-side to file using process 0 More...
 
 ~Tensor ()
 frees CTF tensor More...
 
template<>
void read_sparse_from_file (const char *fpath, bool with_vals)
 
template<>
void read_sparse_from_file (const char *fpath, bool with_vals)
 
template<>
void read_sparse_from_file (const char *fpath, bool with_vals)
 
template<>
void read_sparse_from_file (const char *fpath, bool with_vals)
 
template<>
void write_sparse_to_file (const char *fpath, bool with_vals)
 
template<>
void write_sparse_to_file (const char *fpath, bool with_vals)
 
template<>
void write_sparse_to_file (const char *fpath, bool with_vals)
 
template<>
void write_sparse_to_file (const char *fpath, bool with_vals)
 
template<>
void fill_random (double rmin, double rmax)
 
template<>
void fill_random (float rmin, float rmax)
 
template<>
void fill_random (int64_t rmin, int64_t rmax)
 
template<>
void fill_random (int rmin, int rmax)
 
template<>
void fill_sp_random (double rmin, double rmax, double frac_sp)
 
template<>
void fill_sp_random (float rmin, float rmax, double frac_sp)
 
template<>
void fill_sp_random (int rmin, int rmax, double frac_sp)
 
template<>
void fill_sp_random (int64_t rmin, int64_t rmax, double frac_sp)
 
- Public Member Functions inherited from CTF_int::tensor
CTF::Idx_Tensor operator[] (char const *idx_map)
 associated an index map with the tensor for future operation More...
 
 tensor ()
 
 ~tensor ()
 class free self More...
 
void free_self ()
 destructor More...
 
 tensor (algstrct const *sr, int order, int const *edge_len, int const *sym, CTF::World *wrld, bool alloc_data=true, char const *name=NULL, bool profile=1, bool is_sparse=0)
 defines a tensor object with some mapping (if alloc_data) More...
 
 tensor (algstrct const *sr, int order, bool is_sparse, int const *edge_len, int const *sym, CTF::World *wrld, char const *idx, CTF::Idx_Partition const &prl, CTF::Idx_Partition const &blk, char const *name=NULL, bool profile=1)
 defines a tensor object with some mapping (if alloc_data) More...
 
 tensor (tensor const *other, bool copy=1, bool alloc_data=1)
 creates tensor copy, unfolds other if other is folded More...
 
 tensor (tensor *other, int const *new_sym)
 repacks the tensor other to a different symmetry (assumes existing data contains the symmetry and keeps only values with indices in increasing order) WARN: LIMITATION: new_sym must cause unidirectional structural changes, i.e. {NS,NS}->{SY,NS} OK, {SY,NS}->{NS,NS} OK, {NS,NS,SY,NS}->{SY,NS,NS,NS} NOT OK! More...
 
int * calc_phase () const
 compute the cyclic phase of each tensor dimension More...
 
int calc_tot_phase () const
 calculate the total number of blocks of the tensor More...
 
int64_t calc_nvirt () const
 calculate virtualization factor of tensor return virtualization factor More...
 
int64_t calc_npe () const
 calculate the number of processes this tensor is distributed over return number of processes owning a block of the tensor More...
 
void set_padding ()
 sets padding and local size of a tensor given a mapping More...
 
int set_zero ()
 elects a mapping and sets tensor data to zero More...
 
int set (char const *val)
 sets tensor data to val More...
 
int zero_out_padding ()
 sets padded portion of tensor to zero (this should be maintained internally) More...
 
void scale_diagonals (int const *sym_mask)
 scales each element by 1/(number of entries equivalent to it after permutation of indices for which sym_mask is 1) More...
 
void addinv ()
 
void print_map (FILE *stream=stdout, bool allcall=1) const
 displays mapping information More...
 
void set_name (char const *name)
 set the tensor name More...
 
char const * get_name () const
 get the tensor name More...
 
void profile_on ()
 turn on profiling More...
 
void profile_off ()
 turn off profiling More...
 
void get_raw_data (char **data, int64_t *size) const
 get raw data pointer without copy WARNING: includes padding More...
 
int write (int64_t num_pair, char const *alpha, char const *beta, char *mapped_data, char const rw='w')
 Add tensor data new=alpha*new+beta*old with <key, value> pairs where key is the global index for the value. More...
 
void write (int64_t num_pair, char const *alpha, char const *beta, int64_t const *inds, char const *data)
 Add tensor data new=alpha*new+beta*old with <key, value> pairs where key is the global index for the value. More...
 
void read (int64_t num_pair, char const *alpha, char const *beta, int64_t const *inds, char *data)
 read tensor data with <key, value> pairs where key is the global index for the value, which gets filled in with beta times the old values plus alpha times the values read from the tensor. More...
 
int read (int64_t num_pair, char const *alpha, char const *beta, char *mapped_data)
 read tensor data with <key, value> pairs where key is the global index for the value, which gets filled in with beta times the old values plus alpha times the values read from the tensor. More...
 
char * read (char const *idx, CTF::Idx_Partition const &prl, CTF::Idx_Partition const &blk, bool unpack)
 returns local data of tensor with parallel distribution prl and local blocking blk More...
 
int read (int64_t num_pair, char *mapped_data)
 read tensor data with <key, value> pairs where key is the global index for the value, which gets filled in. More...
 
int64_t get_tot_size (bool packed)
 get number of elements in whole tensor More...
 
int allread (int64_t *num_pair, char **all_data, bool unpack)
 read entire tensor with each processor (in packed layout). WARNING: will use an 'unscalable' amount of memory. More...
 
int allread (int64_t *num_pair, char *all_data, bool unpack=true)
 read entire tensor with each processor (in packed layout). WARNING: will use an 'unscalable' amount of memory. More...
 
void slice (int const *offsets_B, int const *ends_B, char const *beta, tensor *A, int const *offsets_A, int const *ends_A, char const *alpha)
 accumulates out a slice (block) of this tensor = B B[offsets,ends)=beta*B[offsets,ends) + alpha*A[offsets_A,ends_A) More...
 
int permute (tensor *A, int *const *permutation_A, char const *alpha, int *const *permutation_B, char const *beta)
 
int sparsify (char const *threshold=NULL, bool take_abs=true)
 reduce tensor to sparse format, storing only nonzero data, or data above a specified threshold. makes dense tensors sparse. cleans sparse tensors of any 'computed' zeros. More...
 
int sparsify (std::function< bool(char const *)> f)
 sparsifies tensor keeping only values v such that filter(v) = true More...
 
int read_local (int64_t *num_pair, char **mapped_data, bool unpack_sym=false) const
 read tensor data pairs local to processor including those with zero values WARNING: for sparse tensors this includes the zeros to maintain consistency with the behavior for dense tensors, use read_local_nnz to get only nonzeros More...
 
int read_local_nnz (int64_t *num_pair, char **mapped_data, bool unpack_sym=false) const
 read tensor data pairs local to processor that have nonzero values More...
 
void read_local (int64_t *num_pair, int64_t **inds, char **data, bool unpack_sym=false) const
 read tensor data pairs local to processor including those with zero values WARNING: for sparse tensors this includes the zeros to maintain consistency with the behavior for dense tensors, use read_local_nnz to get only nonzeros More...
 
void read_local_nnz (int64_t *num_pair, int64_t **inds, char **data, bool unpack_sym=false) const
 read tensor data pairs local to processor that have nonzero values More...
 
int align (tensor const *B)
 align mapping of thisa tensor to that of B More...
 
int reduce_sum (char *result)
 Performs an elementwise summation reduction on a tensor. More...
 
int reduce_sum (char *result, algstrct const *sr_other)
 Performs an elementwise summation reduction on a tensor with summation defined by sr_other. More...
 
int reduce_sumabs (char *result)
 Performs an elementwise absolute value summation reduction on a tensor. More...
 
int reduce_sumabs (char *result, algstrct const *sr_other)
 Performs an elementwise absolute value summation reduction on a tensor. More...
 
int reduce_sumsq (char *result)
 computes the sum of squares of the elements More...
 
int get_max_abs (int n, char *data) const
 obtains the largest n elements (in absolute value) of the tensor More...
 
void print (FILE *fp=stdout, char const *cutoff=NULL) const
 prints tensor data to file using process 0 More...
 
void prnt () const
 
void compare (const tensor *A, FILE *fp, char const *cutoff)
 prints two sets of tensor data side-by-side to file using process 0 More...
 
void orient_subworld (CTF::World *greater_world, int &bw_mirror_rank, int &fw_mirror_rank, distribution *&odst, char **sub_buffer_)
 maps data from this world (subcomm) to the correct order of processors with respect to a parent (greater_world) comm More...
 
void add_to_subworld (tensor *tsr_sub, char const *alpha, char const *beta)
 accumulates this tensor to a tensor object defined on a different world More...
 
void add_from_subworld (tensor *tsr_sub, char const *alpha, char const *beta)
 accumulates this tensor from a tensor object defined on a different world More...
 
void unfold (bool was_mod=0)
 undo the folding of a local tensor block unsets is_folded and deletes rec_tsr More...
 
void remove_fold ()
 removes folding without doing transpose unsets is_folded and deletes rec_tsr More...
 
double est_time_unfold ()
 estimate cost of potential transpose involved in undoing the folding of a local tensor block More...
 
void fold (int nfold, int const *fold_idx, int const *idx_map, int *all_fdim, int **all_flen)
 fold a tensor by putting the symmetry-preserved portion in the leading dimensions of the tensor sets is_folded and creates rec_tsr with aliased data More...
 
void pull_alias (tensor const *other)
 pulls data from an tensor with an aliased buffer More...
 
void clear_mapping ()
 zeros out mapping More...
 
int redistribute (distribution const &old_dist, int const *old_offsets=NULL, int *const *old_permutation=NULL, int const *new_offsets=NULL, int *const *new_permutation=NULL)
 permutes the data of a tensor to its new layout More...
 
double est_redist_time (distribution const &old_dist, double nnz_frac)
 
int64_t get_redist_mem (distribution const &old_dist, double nnz_frac)
 
int map_tensor_rem (int num_phys_dims, CommData *phys_comm, int fill=0)
 map the remainder of a tensor More...
 
int extract_diag (int const *idx_map, int rw, tensor *&new_tsr, int **idx_map_new)
 extracts the diagonal of a tensor if the index map specifies to do so More...
 
void set_sym (int const *sym)
 sets symmetry, WARNING: for internal use only !!!! More...
 
void set_new_nnz_glb (int64_t const *nnz_blk)
 sets the number of nonzeros both locally (nnz_loc) and overall globally (nnz_tot) More...
 
void spmatricize (int m, int n, int nrow_idx, bool csr)
 transposes local data in preparation for summation or contraction, transforms to COO or CSR format for sparse More...
 
void despmatricize (int nrow_idx, bool csr)
 transposes back local data from sparse matrix format to key-value pair format More...
 
void leave_home_with_buffer ()
 degister home buffer More...
 
void register_size (int64_t size)
 register buffer allocation for this tensor More...
 
void deregister_size ()
 deregister buffer allocation for this tensor More...
 
void write_dense_to_file (MPI_File &file, int64_t offset=0)
 write all tensor data to binary file in element order, unpacking from sparse or symmetric formats More...
 
void write_dense_to_file (char const *filename)
 write all tensor data to binary file in element order, unpacking from sparse or symmetric formats More...
 
void read_dense_from_file (MPI_File &file, int64_t offset=0)
 read all tensor data from binary file in element order, which should be stored as nonsymmetric and dense as done in write_dense_to_file() More...
 
void read_dense_from_file (char const *filename)
 read all tensor data from binary file in element order, which should be stored as nonsymmetric and dense as done in write_dense_to_file() More...
 
template<typename dtype_A , typename dtype_B >
void conv_type (tensor *B)
 convert this tensor from dtype_A to dtype_B and store the result in B (primarily needed for python interface) More...
 
template<typename dtype_A , typename dtype_B >
void exp_helper (tensor *A)
 
template<typename dtype >
void compare_elementwise (tensor *A, tensor *B)
 do an elementwise comparison(==) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void not_equals (tensor *A, tensor *B)
 do an elementwise comparison(!=) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void smaller_than (tensor *A, tensor *B)
 do an elementwise comparison(<) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void smaller_equal_than (tensor *A, tensor *B)
 do an elementwise comparison(<=) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void larger_than (tensor *A, tensor *B)
 do an elementwise comparison(>) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void larger_equal_than (tensor *A, tensor *B)
 do an elementwise comparison(>=) of two tensors with elements of type dtype (primarily needed for python interface), store result in this tensor (has to be boolean tensor) More...
 
template<typename dtype >
void true_divide (tensor *A)
 
tensorself_reduce (int const *idx_A, int **new_idx_A, int order_B, int const *idx_B, int **new_idx_B, int order_C=0, int const *idx_C=NULL, int **new_idx_C=NULL)
 performs a partial reduction on the tensor (used in summation and contraction) More...
 

Data Fields

int nrow
 
int ncol
 
int symm
 
- Data Fields inherited from CTF_int::tensor
CTF::Worldwrld
 distributed processor context on which tensor is defined More...
 
algstrctsr
 algstrct on which tensor elements and operations are defined More...
 
int * sym
 symmetries among tensor dimensions More...
 
int order
 number of tensor dimensions More...
 
int * lens
 unpadded tensor edge lengths More...
 
int * pad_edge_len
 padded tensor edge lengths More...
 
int * padding
 padding along each edge length (less than distribution phase) More...
 
char * name
 name given to tensor More...
 
int is_scp_padded
 whether tensor data has additional padding More...
 
int * scp_padding
 additional padding, may be greater than ScaLAPACK phase More...
 
int * sym_table
 order-by-order table of dimensional symmetry relations More...
 
bool is_mapped
 whether a mapping has been selected More...
 
topologytopo
 topology to which the tensor is mapped More...
 
mappingedge_map
 mappings of each tensor dimension onto topology dimensions More...
 
int64_t size
 current size of local tensor data chunk (mapping-dependent) More...
 
int64_t registered_alloc_size
 size CTF keeps track of for memory usage More...
 
bool is_folded
 whether the data is folded/transposed into a (lower-order) tensor More...
 
int * inner_ordering
 ordering of the dimensions according to which the tensori s folded More...
 
tensorrec_tsr
 representation of folded tensor (shares data pointer) More...
 
bool is_cyclic
 whether the tensor data is cyclically distributed (blocked if false) More...
 
bool is_data_aliased
 whether the tensor data is an alias of another tensor object's data More...
 
tensorslay
 tensor object associated with tensor object whose data pointer needs to be preserved, needed for ScaLAPACK wrapper FIXME: home buffer should presumably take care of this... More...
 
bool has_zero_edge_len
 if true tensor has a zero edge length, so is zero, which short-cuts stuff More...
 
char * data
 tensor data, either the data or the key-value pairs should exist at any given time More...
 
bool has_home
 whether the tensor has a home mapping/buffer More...
 
char * home_buffer
 buffer associated with home mapping of tensor, to which it is returned More...
 
int64_t home_size
 size of home buffer More...
 
bool is_home
 whether the latest tensor data is in the home buffer More...
 
bool left_home_transp
 whether the tensor left home to transpose More...
 
bool profile
 whether profiling should be done for contractions/sums involving this tensor More...
 
bool is_sparse
 whether only the non-zero elements of the tensor are stored More...
 
bool is_csr
 whether CSR or COO if folded More...
 
int nrow_idx
 how many modes are folded into matricized row More...
 
int64_t nnz_loc
 number of local nonzero elements More...
 
int64_t nnz_tot
 maximum number of local nonzero elements over all procs More...
 
int64_t * nnz_blk
 nonzero elements in each block owned locally More...
 

Additional Inherited Members

- Protected Member Functions inherited from CTF_int::tensor
void init (algstrct const *sr, int order, int const *edge_len, int const *sym, CTF::World *wrld, bool alloc_data, char const *name, bool profile, bool is_sparse)
 initializes tensor data More...
 
PairIterator read_all_pairs (int64_t *num_pair, bool unpack)
 read all pairs with each processor (packed) More...
 
void copy_tensor_data (tensor const *other)
 copies all tensor data from other More...
 
void set_distribution (char const *idx, CTF::Idx_Partition const &prl, CTF::Idx_Partition const &blk)
 set edge mappings as specified More...
 

Detailed Description

template<typename dtype = double>
class CTF::Matrix< dtype >

Matrix class which encapsulates a 2D tensor.

Parameters
[in]dtypespecifies tensor element type

Definition at line 18 of file matrix.h.

Constructor & Destructor Documentation

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( )

default constructor for a matrix

Definition at line 29 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, and CTF::Matrix< dtype >::nrow.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( Matrix< dtype > const &  A)

copy constructor for a matrix

Parameters
[in]Amatrix to copy along with its data

Definition at line 35 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( Tensor< dtype > const &  A)

casts a tensor to a matrix

Parameters
[in]Atensor object of order 2

Definition at line 43 of file matrix.cxx.

References AS, IASSERT, CTF_int::tensor::lens, CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, NS, CTF_int::tensor::order, SY, CTF_int::tensor::sym, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
World wrld,
CTF_int::algstrct const &  sr = Ring<dtype>(),
char const *  name = NULL,
int  profile = 0 
)

constructor for a matrix

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]wrldCTF world where the tensor will live
[in]srdefines the tensor arithmetic for this tensor
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor

Definition at line 66 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, NS, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
World wrld,
char const *  name,
int  profile = 0,
CTF_int::algstrct const &  sr = Ring<dtype>() 
)

constructor for a matrix

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]wrldCTF world where the tensor will live
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor
[in]srdefines the tensor arithmetic for this tensor

Definition at line 95 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
int  atr = 0,
World wrld = get_universe(),
CTF_int::algstrct const &  sr = Ring<dtype>(),
char const *  name = NULL,
int  profile = 0 
)

constructor for a matrix

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]atrquantifier for sparsity and symmetry of matrix
[in]wrldCTF world where the tensor will live
[in]srdefines the tensor arithmetic for this tensor
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor

Definition at line 80 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
int  atr,
World wrld,
char const *  name,
int  profile = 0,
CTF_int::algstrct const &  sr = Ring<dtype>() 
)

constructor for a matrix

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]atrquantifier for sparsity and symmetry of matrix
[in]wrldCTF world where the tensor will live
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor
[in]srdefines the tensor arithmetic for this tensor

Definition at line 110 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
char const *  idx,
Idx_Partition const &  prl,
Idx_Partition const &  blk = Idx_Partition(),
int  atr = 0,
World wrld = get_universe(),
CTF_int::algstrct const &  sr = Ring<dtype>(),
char const *  name = NULL,
int  profile = 0 
)

constructor for a matrix with a given initial cyclic distribution

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]idxassignment of characters to each dim
[in]prlmesh processor topology with character labels
[in]blklocal blocking with processor labels
[in]atrquantifier for sparsity and symmetry of matrix
[in]wrldCTF world where the tensor will live
[in]srdefines the tensor arithmetic for this tensor
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor

Definition at line 126 of file matrix.cxx.

References CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, and CTF::Matrix< dtype >::symm.

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int  nrow,
int  ncol,
int  mb,
int  nb,
int  pr,
int  pc,
int  rsrc,
int  csrc,
int  lda,
dtype const *  data,
World wrld = get_universe(),
CTF_int::algstrct const &  sr = Ring<dtype>(),
char const *  name = NULL,
int  profile = 0 
)

constructor for a nonsymmetric matrix with a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix)

Parameters
[in]nrownumber of matrix rows
[in]ncolnumber of matrix columns
[in]mbrow block dimension
[in]nbcol block dimension
[in]prnumber of rows in processor grid
[in]pcnumber of cols in processor grid
[in]rsrcprocessor row holding first block row (0-based unlike ScaLAPACK)
[in]csrcprocessor col holding first block row (0-based unlike ScaLAPACK)
[in]ldaleading dimension (length of buffer corresponding to row)
[in]datalocally stored values
[in]wrldCTF world where the tensor will live, must contain pr*pc processors
[in]srdefines the tensor arithmetic for this tensor
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor

Definition at line 344 of file matrix.cxx.

References CTF_SCALAPACK::cblacs_gridinfo(), CTF::Matrix< dtype >::ncol, CTF::Matrix< dtype >::nrow, NS, CTF::Matrix< dtype >::symm, and CTF::Matrix< dtype >::write_mat().

template<typename dtype >
CTF::Matrix< dtype >::Matrix ( int const *  desc,
dtype const *  data,
World wrld = get_universe(),
CTF_int::algstrct const &  sr = Ring<dtype>(),
char const *  name = NULL,
int  profile = 0 
)

construct Matrix from ScaLAPACK array descriptor `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix)

Parameters
[in]descScaLAPACK descriptor array: see ScaLAPACK docs for "Array Descriptor for In-core Dense Matrices"
[in]datalocally stored values
[in]wrldCTF world where the tensor will live, must contain pr*pc processors
[in]srdefines the tensor arithmetic for this tensor
[in]namean optionary name for the tensor
[in]profileset to 1 to profile contractions involving this tensor

Definition at line 377 of file matrix.cxx.

References CTF_SCALAPACK::cblacs_gridinfo(), IASSERT, CTF::Matrix< dtype >::ncol, CTF::World::np, CTF::Matrix< dtype >::nrow, NS, CTF::World::rank, CTF::Matrix< dtype >::symm, and CTF::Matrix< dtype >::write_mat().

Member Function Documentation

template<typename dtype >
void CTF::Matrix< dtype >::get_desc ( int &  ictxt,
int *&  desc 
)

get a ScaLAPACK descriptor for this Matrix, will always be in pure cyclic layout

Parameters
[out]ictxtindex of newly created context
[out]descarray of integers of size 9, which will be filled with attributes see ScaLAPACK docs for "Array Descriptor for In-core Dense Matrices"

Definition at line 296 of file matrix.cxx.

References CTF_int::mapping::calc_phase(), CTF_SCALAPACK::cblacs_get(), CTF_SCALAPACK::cblacs_gridinit(), CTF::World::comm, CTF_int::grid_wrapper::ctxt, CTF_int::tensor::edge_map, IASSERT, CTF::Matrix< dtype >::ncol, CTF::World::np, CTF::Matrix< dtype >::nrow, CTF_int::tensor::pad_edge_len, CTF_int::grid_wrapper::pc, CTF_int::grid_wrapper::pr, CTF_int::scalapack_grids, and CTF_int::tensor::wrld.

Referenced by CTF::Matrix< dtype >::qr(), and CTF::Matrix< dtype >::svd().

template<typename dtype >
void CTF::Matrix< dtype >::read_mat ( int  mb,
int  nb,
int  pr,
int  pc,
int  rsrc,
int  csrc,
int  lda,
dtype *  data 
)

reads a nonsymmetric matrix into a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix)

Parameters
[in]mbrow block dimension
[in]nbcol block dimension
[in]prnumber of rows in processor grid
[in]pcnumber of cols in processor grid
[in]rsrcprocessor row holding first block row (0-based unlike ScaLAPACK)
[in]csrcprocessor col holding first block row (0-based unlike ScaLAPACK)
[in]ldaleading dimension (length of buffer corresponding to row)
[out]datalocally stored values

Definition at line 247 of file matrix.cxx.

References CTF::Pair< dtype >::d, CTF_int::tensor::data, ctf.core::dtype, CTF_int::tensor::edge_map, CTF::get_my_kv_pair(), CTF::Tensor< dtype >::i(), CTF_int::tensor::is_sparse, CTF::Matrix< dtype >::ncol, ctf.core::np(), CTF::Matrix< dtype >::nrow, CTF::World::rank, CTF::Tensor< dtype >::read(), CTF::Matrix< dtype >::read_mat(), CTF_int::tensor::size, CTF_int::tensor::sr, and CTF_int::tensor::wrld.

Referenced by CTF::Matrix< dtype >::qr(), CTF::Matrix< dtype >::read_mat(), and CTF::Matrix< dtype >::svd().

template<typename dtype >
void CTF::Matrix< dtype >::read_mat ( int const *  desc,
dtype *  data 
)

read Matrix into ScaLAPACK array descriptor `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix)

Parameters
[in]descScaLAPACK descriptor array: see ScaLAPACK docs for "Array Descriptor for In-core Dense Matrices"
[in]datalocally stored values

Definition at line 332 of file matrix.cxx.

References CTF_SCALAPACK::cblacs_gridinfo(), IASSERT, CTF::World::rank, CTF::Matrix< dtype >::read_mat(), and CTF_int::tensor::wrld.

template<typename dtype >
void CTF::Matrix< dtype >::write_mat ( int  mb,
int  nb,
int  pr,
int  pc,
int  rsrc,
int  csrc,
int  lda,
dtype const *  data 
)

writes a nonsymmetric matrix from a block-cyclic initial distribution this is `cheap' if mb=nb=1, nrowpr=0, ncolpc=0, rsrc=0, csrc=0, but is done via sparse read/write otherwise assumes processor grid is row-major (otherwise transpose matrix)

Parameters
[in]mbrow block dimension
[in]nbcol block dimension
[in]prnumber of rows in processor grid
[in]pcnumber of cols in processor grid
[in]rsrcprocessor row holding first block row (0-based unlike ScaLAPACK)
[in]csrcprocessor col holding first block row (0-based unlike ScaLAPACK)
[in]ldaleading dimension (length of buffer corresponding to row)
[out]datalocally stored values

Definition at line 203 of file matrix.cxx.

References CTF::Pair< dtype >::d, CTF_int::tensor::data, ctf.core::dtype, CTF_int::tensor::edge_map, CTF::get_my_kv_pair(), CTF::Tensor< dtype >::i(), CTF::Matrix< dtype >::ncol, ctf.core::np(), CTF::Matrix< dtype >::nrow, CTF::World::rank, CTF_int::tensor::size, CTF::Tensor< dtype >::write(), and CTF_int::tensor::wrld.

Referenced by CTF::Matrix< dtype >::Matrix().

Field Documentation

template<typename dtype = double>
int CTF::Matrix< dtype >::symm

Definition at line 20 of file matrix.h.

Referenced by CTF::Matrix< dtype >::Matrix(), mis(), and mis2().


The documentation for this class was generated from the following files: