Template Class TaskBasedContractor

Class Documentation

template<class TensorType>
class Jet::TaskBasedContractor

TaskBasedContractor is a tensor network contractor that contracts tensors concurrently using a task-based scheduler.

tparam Tensor

Type of the tensors to be contracted. The only requirement for this type is that the following member functions exist:

static Tensor AddTensors(const Tensor&, const Tensor&);
static Tensor ContractTensors(const Tensor&, const Tensor&);

Public Types

using NameToTaskMap = std::unordered_map<std::string, tf::Task>

Type of the name-to-task map.

using NameToTensorMap = std::unordered_map<std::string, std::unique_ptr<TensorType>>

Type of the name-to-tensor map.

using NameToParentsMap = std::unordered_map<std::string, std::unordered_set<std::string>>

Type of the name-to-parents map.

using TaskFlow = tf::Taskflow

Type of the task dependency graph.

Public Functions

inline TaskBasedContractor(size_t num_threads = std::thread::hardware_concurrency())

Constructs a new TaskBasedContractor object.

inline const NameToTaskMap &GetNameToTaskMap() const noexcept

Returns the name-to-task map of this TaskBasedContractor.

Returns

Map which associates names to tasks.

inline const NameToTensorMap &GetNameToTensorMap() const noexcept

Returns the name-to-tensor map of this TaskBasedContractor.

Returns

Map which associates names to tensors.

inline const NameToParentsMap &GetNameToParentsMap() const noexcept

Returns the name-to-parents map of this TaskBasedContractor.

Returns

Map which associates names to a vector of parent node IDs.

inline const std::vector<TensorType> &GetResults() const noexcept

Returns the result of the final tensor contraction after each call to AddContractionTasks().

See

AddContractionTasks()

See

Contract()

Note

These results are only accessible after the future returned by Contract() becomes available.

Returns

Vector of tensors.

inline const TensorType &GetReductionResult() const noexcept

Returns the reduction of the final tensor results.

See

AddReductionTask()

See

Contract()

Note

This result is only accessible after the future returned by Contract() becomes available.

Returns

Tensor at the end of the reduction task.

inline const TaskFlow &GetTaskflow() const noexcept

Returns the taskflow of this TaskBasedContractor.

Returns

Taskflow instance representing the task dependency graph.

inline void AddTaskflow(tf::Taskflow &taskflow) noexcept

Adds another Taskflow graph to this TaskBasedContractor.

Warning

This function does not update the values returned by GetFlops() or GetMemory().

inline double GetFlops() const noexcept

Returns the number of floating-point operations needed to perform all the contraction tasks (assuming the tensor elements are floating-point numbers).

Returns

Number of floating-point additions and multiplications.

inline double GetMemory() const noexcept

Returns the memory required (up to a constant sizeof() factor) to simultaneously hold all the intermediate and final results of the contraction tasks.

Returns

Number of elements in the non-leaf tensors.

inline size_t AddContractionTasks(const TensorNetwork<TensorType> &tn, const PathInfo &path_info) noexcept

Adds contraction tasks for a tensor network.

Parameters
  • tnTensor network to be contracted.

  • path_info – Contraction path through the tensor network.

Returns

Number of contraction tasks that are shared with previous calls to this function.

inline size_t AddReductionTask() noexcept

Adds a reduction task to sum the result tensors.

Warning

Only one reduction task should be added per TaskBasedContractor instance.

Returns

Number of created reduction tasks.

inline size_t AddDeletionTasks() noexcept

Adds deletion tasks for intermediate tensors.

Each tensor that participates in a contraction will be paired with a deletion task which deallocates the tensor once it is no longer needed.

Returns

Number of created deletion tasks.

inline std::future<void> Contract()

Executes the tasks in this TaskBasedContractor.

Returns

Future that becomes available once all the tasks have finished.