(git:374b731)
Loading...
Searching...
No Matches
dbt_types.F File Reference

Go to the source code of this file.

Data Types

type  dbt_types::dbt_pgrid_type
 
type  dbt_types::dbt_contraction_storage
 
type  dbt_types::dbt_type
 
type  dbt_types::dbt_distribution_type
 
interface  dbt_types::dbt_create
 

Modules

module  dbt_types
 DBT tensor framework for block-sparse tensor contraction: Types and create/destroy routines.
 

Functions/Subroutines

recursive subroutine, public dbt_types::dbt_mp_dims_create (nodes, dims, tensor_dims, lb_ratio)
 Create process grid dimensions corresponding to one dimension of the matrix representation of a tensor, imposing that no process grid dimension is greater than the corresponding tensor dimension.
 
subroutine, public dbt_types::dbt_pgrid_create_expert (mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit)
 Create an n-dimensional process grid. We can not use a n-dimensional MPI cartesian grid for tensors since the mapping between n-dim. and 2-dim. index allows for an arbitrary reordering of tensor index. Therefore we can not use n-dim. MPI Cartesian grid because it may not be consistent with the respective 2d grid. The 2d Cartesian MPI grid is the reference grid (since tensor data is stored as DBM matrix) and this routine creates an object that is a n-dim. interface to this grid. map1_2d and map2_2d don't need to be specified (correctly), grid may be redefined in dbt_distribution_new. Note that pgrid is equivalent to a MPI cartesian grid only if map1_2d and map2_2d don't reorder indices (which is the case if [map1_2d, map2_2d] == [1, 2, ..., ndims]). Otherwise the mapping of grid coordinates to processes depends on the ordering of the indices and is not equivalent to a MPI cartesian grid.
 
type(dbt_pgrid_type) function, public dbt_types::dbt_nd_mp_comm (comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, nsplit, dimsplit)
 Create a default nd process topology that is consistent with a given 2d topology. Purpose: a nd tensor defined on the returned process grid can be represented as a DBM matrix with the given 2d topology. This is needed to enable contraction of 2 tensors (must have the same 2d process grid).
 
subroutine, public dbt_types::dbt_nd_mp_free (mp_comm)
 Release the MPI communicator.
 
subroutine, public dbt_types::mp_environ_pgrid (pgrid, dims, task_coor)
 as mp_environ but for special pgrid type
 
subroutine, public dbt_types::dbt_distribution_new_expert (dist, pgrid, map1_2d, map2_2d, nd_dist_1, nd_dist_2, nd_dist_3, nd_dist_4, own_comm)
 Create a tensor distribution.
 
subroutine, public dbt_types::dbt_distribution_new (dist, pgrid, nd_dist_1, nd_dist_2, nd_dist_3, nd_dist_4)
 Create a tensor distribution.
 
subroutine, public dbt_types::dbt_pgrid_destroy (pgrid, keep_comm)
 destroy process grid
 
subroutine, public dbt_types::dbt_distribution_destroy (dist)
 Destroy tensor distribution.
 
type(dbt_distribution_type) function, public dbt_types::dbt_distribution (tensor)
 get distribution from tensor
 
subroutine, public dbt_types::dbt_hold (tensor)
 reference counting for tensors (only needed for communicator handle that must be freed when no longer needed)
 
pure integer(int_8) function, public dbt_types::ndims_matrix_row (tensor)
 how many tensor dimensions are mapped to matrix row
 
pure integer(int_8) function, public dbt_types::ndims_matrix_column (tensor)
 how many tensor dimensions are mapped to matrix column
 
pure integer function, public dbt_types::ndims_tensor (tensor)
 tensor rank
 
subroutine, public dbt_types::dims_tensor (tensor, dims)
 tensor dimensions
 
subroutine, public dbt_types::dbt_destroy (tensor)
 Destroy a tensor.
 
subroutine, public dbt_types::blk_dims_tensor (tensor, dims)
 tensor block dimensions
 
subroutine, public dbt_types::dbt_blk_sizes (tensor, ind, blk_size)
 Size of tensor block.
 
subroutine, public dbt_types::dbt_blk_offsets (tensor, ind, blk_offset)
 offset of tensor block
 
subroutine, public dbt_types::dbt_get_stored_coordinates (tensor, ind_nd, processor)
 Generalization of block_get_stored_coordinates for tensors.
 
subroutine, public dbt_types::dbt_pgrid_create (mp_comm, dims, pgrid, tensor_dims)
 
subroutine, public dbt_types::dbt_pgrid_set_strict_split (pgrid)
 freeze current split factor such that it is never changed during contraction
 
subroutine, public dbt_types::dbt_pgrid_change_dims (pgrid, pdims)
 change dimensions of an existing process grid.
 
subroutine, public dbt_types::dbt_filter (tensor, eps)
 As block_filter.
 
pure integer function, public dbt_types::dbt_nblks_local (tensor, idim)
 local number of blocks along dimension idim
 
pure integer function, public dbt_types::dbt_nblks_total (tensor, idim)
 total numbers of blocks along dimension idim
 
subroutine, public dbt_types::dbt_get_info (tensor, nblks_total, nfull_total, nblks_local, nfull_local, pdims, my_ploc, blks_local_1, blks_local_2, blks_local_3, blks_local_4, proc_dist_1, proc_dist_2, proc_dist_3, proc_dist_4, blk_size_1, blk_size_2, blk_size_3, blk_size_4, blk_offset_1, blk_offset_2, blk_offset_3, blk_offset_4, distribution, name)
 As block_get_info but for tensors.
 
pure integer function, public dbt_types::dbt_get_num_blocks (tensor)
 As block_get_num_blocks: get number of local blocks.
 
integer(kind=int_8) function, public dbt_types::dbt_get_num_blocks_total (tensor)
 Get total number of blocks.
 
subroutine, public dbt_types::dbt_clear (tensor)
 Clear tensor (s.t. it does not contain any blocks)
 
subroutine, public dbt_types::dbt_finalize (tensor)
 Finalize tensor, as block_finalize. This should be taken care of internally in DBT tensors, there should not be any need to call this routine outside of DBT tensors.
 
subroutine, public dbt_types::dbt_scale (tensor, alpha)
 as block_scale
 
pure integer function, public dbt_types::dbt_get_nze (tensor)
 
integer(kind=int_8) function, public dbt_types::dbt_get_nze_total (tensor)
 
pure integer function, public dbt_types::dbt_blk_size (tensor, ind, idim)
 block size of block with index ind along dimension idim
 
pure integer function, public dbt_types::dbt_max_nblks_local (tensor)
 returns an estimate of maximum number of local blocks in tensor (irrespective of the actual number of currently present blocks) this estimate is based on the following assumption: tensor data is dense and load balancing is within a factor of 2
 
subroutine, public dbt_types::dbt_default_distvec (nblk, nproc, blk_size, dist)
 get a load-balanced and randomized distribution along one tensor dimension
 
subroutine, public dbt_types::dbt_copy_contraction_storage (tensor_in, tensor_out)