MADNESS 0.10.1
Classes | Namespaces | Enumerations | Functions
exchangeoperator.h File Reference
#include <madness.h>
#include <madness/world/cloud.h>
#include <madness/mra/macrotaskq.h>
#include <madness/chem/SCFOperators.h>
#include <algorithm>
#include <fstream>
#include <list>
#include <map>
#include <utility>
#include <vector>
Include dependency graph for exchangeoperator.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  madness::ExchangeBatchLRU< keyT, dataT >
 Bounded cache of fetched exchange batches, keyed by cloud record key. More...
 
class  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >
 
struct  madness::ExchTaskProfile
 One task's record for the exchange profiler. More...
 
struct  madness::FinalizeNodeRec< T, NDIM >
 One coefficient node in transit during the exchange finalize. More...
 
class  madness::FinalizeReducer< T, NDIM >
 Receiving end of the exchange finalize, living in the world the transfer rides on. More...
 
class  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeRow
 
class  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple
 
class  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::MacroTaskPartitionerExchange
 custom partitioning for the exchange operator in exchangeoperator.h More...
 
class  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeRow::MacroTaskPartitionerRow
 custom partitioning for the exchange operator in exchangeoperator.h More...
 
struct  madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::PrefetchSlot
 One batch requested ahead of the task that will read it. More...
 
struct  madness::ExchangeBatchLRU< keyT, dataT >::Slot
 

Namespaces

namespace  madness
 Namespace for all elements and tools of MADNESS.
 

Enumerations

enum  madness::ExchangeBatchDim { madness::EXCHANGE_BATCH_VF = 0 , madness::EXCHANGE_BATCH_BRA = 1 , madness::EXCHANGE_BATCH_KET = 2 }
 which of the three exchange operand vectors a stored batch belongs to More...
 

Functions

template<typename T , std::size_t NDIM>
void madness::coalesced_gaxpy (World &transport_world, FinalizeReducer< T, NDIM > &reducer, std::vector< Function< T, NDIM > > &dest_vec, std::vector< Function< T, NDIM > > &src_vec, const T beta, const std::size_t chunk_entries)
 Accumulate src_vec into dest_vec in bulk, one message per destination rank per chunk.
 
bool madness::exch_force_general_path ()
 Send a symmetric application down the general (bra, ket, vf) path? Read once per process.
 
bool madness::exch_task_profile_enabled ()
 Is per-task exchange profiling on? Read once per process.
 
void madness::exch_write_cost_matrix (const long call_index, const long k, const long M, const std::vector< double > &cost)
 Write the measured per-task cost matrix of one application, for offline inspection.
 
void madness::exch_write_task_profile (const ExchTaskProfile &p)
 Append one record to exch_taskprof.r<rank>.jsonl.
 
long madness::exchange_batch_record_key (const long salt, const int dim, const Batch_1D &r)
 Deterministic cloud record key for one stored batch: (salt, dimension, range).
 
template<typename T , std::size_t NDIM>
long madness::exchange_batch_salt (const std::vector< Function< T, NDIM > > &ket)
 Per-invocation salt for the exchange batch record keys, from the ket identities.
 
std::map< std::pair< long, long >, longmadness::exchange_row_owner_assign (const long ncolumn, const long nrow, const long nworker)
 Owner of every task in the asymmetric grid: all tasks of a column go to one worker.
 
std::vector< std::pair< Batch_1D, Batch_1D > > madness::exchange_row_owner_grid (const std::size_t ncolumn, const std::size_t nrow, const long nsubworld)
 The asymmetric task grid: every (column, row) pair over two independent splits.
 
std::vector< Batch_1Dmadness::exchange_row_owner_split (const std::size_t n, const long nsubworld)
 Batch boundaries for the asymmetric row/column split: one batch per rank.
 
template<typename T , std::size_t NDIM>
bool madness::exchange_same_operands (const std::vector< Function< T, NDIM > > &a, const std::vector< Function< T, NDIM > > &b)
 Are these the same functions, so that one stored record can serve both operand roles?
 
std::map< std::pair< long, long >, longmadness::exchange_sym_cost_aware_assign (const long n, const long M, const std::vector< double > &cost)
 Cost-aware owner assignment for the symmetric algorithm's triangular task matrix.
 
long madness::exchange_sym_owner_nbatch (const std::size_t n, const long nsubworld, const long granularity_level)
 Number of batches M for the owner-pinned symmetric exchange algorithm.
 
std::vector< Batch_1Dmadness::exchange_sym_owner_split (const std::size_t n, const long nsubworld, const long granularity_level)
 Split a vector of length n into M = exchange_sym_owner_nbatch(...) contiguous batches.
 
std::map< std::pair< long, long >, longmadness::exchange_sym_round_robin_assign (const long n, const long M)
 Round-robin owner assignment for the symmetric algorithm's triangular task matrix.
 
long madness::exchange_sym_tri (const long i, const long j)
 Triangular index of a batch pair, collapsing (i,j) and (j,i): a*(a+1)/2 + b.