1+ /*
2+ //@HEADER
3+ // *****************************************************************************
4+ //
5+ // configuration.h
6+ // DARMA/vt-lb => Virtual Transport/Load Balancers
7+ //
8+ // Copyright 2019-2024 National Technology & Engineering Solutions of Sandia, LLC
9+ // (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
10+ // Government retains certain rights in this software.
11+ //
12+ // Redistribution and use in source and binary forms, with or without
13+ // modification, are permitted provided that the following conditions are met:
14+ //
15+ // * Redistributions of source code must retain the above copyright notice,
16+ // this list of conditions and the following disclaimer.
17+ //
18+ // * Redistributions in binary form must reproduce the above copyright notice,
19+ // this list of conditions and the following disclaimer in the documentation
20+ // and/or other materials provided with the distribution.
21+ //
22+ // * Neither the name of the copyright holder nor the names of its
23+ // contributors may be used to endorse or promote products derived from this
24+ // software without specific prior written permission.
25+ //
26+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27+ // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28+ // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29+ // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30+ // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31+ // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32+ // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33+ // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34+ // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35+ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36+ // POSSIBILITY OF SUCH DAMAGE.
37+ //
38+ // Questions? Contact [email protected] 39+ //
40+ // *****************************************************************************
41+ //@HEADER
42+ */
43+
44+ #if !defined INCLUDED_VT_LB_ALGO_TEMPEREDLB_CONFIGURATION_H
45+ #define INCLUDED_VT_LB_ALGO_TEMPEREDLB_CONFIGURATION_H
46+
47+ #include < vt-lb/algo/temperedlb/work_model.h>
48+
49+ #include < cmath>
50+
51+ namespace vt_lb ::algo::temperedlb {
52+
53+ struct Configuration {
54+ Configuration () = default ;
55+
56+ explicit Configuration (int num_ranks) {
57+ f_ = 2 ;
58+ k_max_ = std::ceil (std::sqrt (std::log (num_ranks)/std::log (2.0 )));
59+ }
60+
61+ bool hasMemoryInfo () const { return work_model_.has_memory_info ; }
62+ bool hasTaskSerializedMemoryInfo () const {
63+ return hasMemoryInfo () && work_model_.has_task_serialized_memory_info ;
64+ }
65+ bool hasTaskWorkingMemoryInfo () const {
66+ return hasMemoryInfo () && work_model_.has_task_working_memory_info ;
67+ }
68+ bool hasTaskFootprintMemoryInfo () const {
69+ return hasMemoryInfo () && work_model_.has_task_footprint_memory_info ;
70+ }
71+ bool hasSharedBlockMemoryInfo () const {
72+ return hasMemoryInfo () && work_model_.has_shared_block_memory_info ;
73+ }
74+
75+ // / @brief Number of trials to perform
76+ int num_trials_ = 1 ;
77+ // / @brief Number of iterations per trial
78+ int num_iters_ = 10 ;
79+ // / @brief Fanout for information propagation
80+ int f_ = 2 ;
81+ // / @brief Number of rounds of information propagation
82+ int k_max_ = 1 ;
83+ // / @brief Whether to use deterministic selection
84+ bool deterministic_ = true ;
85+ // / @brief Seed for random number generation when deterministic_ is true
86+ int seed_ = 29 ;
87+
88+ // / @brief Work model parameters (rank-alpha, beta, gamma, delta)
89+ WorkModel work_model_;
90+
91+ // / @brief Whether to cluster based on shared blocks
92+ bool cluster_based_on_shared_blocks_ = false ;
93+ // / @brief Whether to cluster based on communication
94+ bool cluster_based_on_communication_ = false ;
95+ // / @brief Whether to visualize the task graph
96+ bool visualize_task_graph_ = false ;
97+ // / @brief Whether to visualize the clusters
98+ bool visualize_clusters_ = false ;
99+
100+ // / @brief Tolerance for convergence
101+ double converge_tolerance_ = 0.01 ;
102+ };
103+
104+ }
105+
106+ #endif /* INCLUDED_VT_LB_ALGO_TEMPEREDLB_CONFIGURATION_H*/
0 commit comments