Skip to content

Commit dbd41e6

Browse files
cwschillycz4rs
authored andcommitted
#2201: tests: add tests for temperedLB with load, load+memory, and load+memory+homing cases
1 parent f3341d8 commit dbd41e6

6 files changed

+100
-0
lines changed

tests/CMakeLists.txt

+9
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,15 @@ foreach(SUB_DIR ${UNIT_TEST_SUBDIRS_LIST})
215215
endif()
216216
endforeach()
217217

218+
# Copy synthetic blocks data files to <build-dir>/tests/synthetic-blocks-data
219+
set(SYNTHETIC_BLOCKS_DATA_DEST "${CMAKE_BINARY_DIR}/tests/synthetic-blocks-data")
220+
file(MAKE_DIRECTORY ${SYNTHETIC_BLOCKS_DATA_DEST})
221+
file(GLOB SYNTHETIC_BLOCKS_DATA_FILES "${CMAKE_SOURCE_DIR}/tests/data/synthetic-blocks/*")
222+
foreach(SYNTHETIC_BLOCKS_DATA_FILE ${SYNTHETIC_BLOCKS_DATA_FILES})
223+
get_filename_component(FILE_NAME ${SYNTHETIC_BLOCKS_DATA_FILE} NAME)
224+
configure_file(${SYNTHETIC_BLOCKS_DATA_FILE} ${SYNTHETIC_BLOCKS_DATA_DEST} COPYONLY)
225+
endforeach()
226+
218227
#
219228
# Performance Tests
220229
#
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"metadata":{"type":"LBDatafile","rank":0},"phases":[{"id":0,"tasks":[{"entity":{"home":0,"id":1,"migratable":true,"type":"object"},"node":0,"resource":"cpu","time":0.5,"user_defined":{"shared_id":0,"shared_bytes":9.0,"home_rank":0}},{"entity":{"home":0,"id":3,"migratable":true,"type":"object"},"node":0,"resource":"cpu","time":0.5,"user_defined":{"shared_id":1,"shared_bytes":9.0,"home_rank":0}},{"entity":{"home":0,"id":2,"migratable":true,"type":"object"},"node":0,"resource":"cpu","time":0.5,"user_defined":{"shared_id":1,"shared_bytes":9.0,"home_rank":0}},{"entity":{"home":0,"id":0,"migratable":true,"type":"object"},"node":0,"resource":"cpu","time":1.0,"user_defined":{"shared_id":0,"shared_bytes":9.0,"home_rank":0}}],"communications":[{"type":"SendRecv","to":{"type":"object","id":5},"messages":1,"from":{"type":"object","id":0},"bytes":2.0},{"type":"SendRecv","to":{"type":"object","id":4},"messages":1,"from":{"type":"object","id":1},"bytes":1.0},{"type":"SendRecv","to":{"type":"object","id":2},"messages":1,"from":{"type":"object","id":3},"bytes":1.0},{"type":"SendRecv","to":{"type":"object","id":8},"messages":1,"from":{"type":"object","id":3},"bytes":0.5}]}]}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"metadata":{"type":"LBDatafile","rank":1},"phases":[{"id":0,"tasks":[{"entity":{"home":1,"id":5,"migratable":true,"type":"object"},"node":1,"resource":"cpu","time":2.0,"user_defined":{"shared_id":2,"shared_bytes":9.0,"home_rank":1}},{"entity":{"home":1,"id":4,"migratable":true,"type":"object"},"node":1,"resource":"cpu","time":0.5,"user_defined":{"shared_id":2,"shared_bytes":9.0,"home_rank":1}},{"entity":{"home":1,"id":7,"migratable":true,"type":"object"},"node":1,"resource":"cpu","time":0.5,"user_defined":{"shared_id":3,"shared_bytes":9.0,"home_rank":1}},{"entity":{"home":1,"id":6,"migratable":true,"type":"object"},"node":1,"resource":"cpu","time":1.0,"user_defined":{"shared_id":3,"shared_bytes":9.0,"home_rank":1}}],"communications":[{"type":"SendRecv","to":{"type":"object","id":1},"messages":1,"from":{"type":"object","id":4},"bytes":2.0},{"type":"SendRecv","to":{"type":"object","id":8},"messages":1,"from":{"type":"object","id":5},"bytes":2.0},{"type":"SendRecv","to":{"type":"object","id":6},"messages":1,"from":{"type":"object","id":7},"bytes":1.0}]}]}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"metadata":{"type":"LBDatafile","rank":2},"phases":[{"id":0,"tasks":[{"entity":{"home":2,"id":8,"migratable":true,"type":"object"},"node":2,"resource":"cpu","time":1.5,"user_defined":{"shared_id":4,"shared_bytes":9.0,"home_rank":2}}],"communications":[{"type":"SendRecv","to":{"type":"object","id":6},"messages":1,"from":{"type":"object","id":8},"bytes":1.5}]}]}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"metadata":{"type":"LBDatafile","rank":3},"phases":[{"id":0,"tasks":[]}]}

tests/unit/lb/test_temperedlb.cc

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#include <vt/transport.h>
2+
#include <vt/vrt/collection/balance/read_lb.h>
3+
#include <vt/vrt/collection/balance/workload_replay.h>
4+
5+
#include "test_helpers.h"
6+
#include "test_parallel_harness.h"
7+
8+
namespace vt { namespace tests { namespace unit { namespace lb {
9+
10+
#if vt_check_enabled(lblite)
11+
12+
using TestTemperedLB = TestParallelHarness;
13+
14+
std::string writeTemperedLBConfig(std::string transfer_strategy,
15+
bool mem_constraints,
16+
double delta = 0.0,
17+
double beta = 0.0,
18+
double gamma = 0.0) {
19+
int this_rank;
20+
MPI_Comm_rank(MPI_COMM_WORLD, &this_rank);
21+
auto config_file = getUniqueFilename();
22+
if (this_rank == 0) {
23+
std::ofstream cfg_file_{config_file.c_str(), std::ofstream::out | std::ofstream::trunc};
24+
cfg_file_ << "0 TemperedLB transfer=" << transfer_strategy <<
25+
" alpha=1.0" <<
26+
" beta=" << beta <<
27+
" gamma=" << gamma <<
28+
" delta=" << delta;
29+
if (mem_constraints) {
30+
cfg_file_ << " memory_threshold=20.0";
31+
}
32+
cfg_file_.close();
33+
}
34+
return config_file;
35+
}
36+
37+
void runTemperedLBTest(std::string config_file, double expected_imb = 0.0) {
38+
// Set configuration
39+
theConfig()->vt_lb = true;
40+
theConfig()->vt_lb_name = "TemperedLB";
41+
theConfig()->vt_lb_data_in = true;
42+
theConfig()->vt_lb_file_name = config_file;
43+
theConfig()->vt_lb_data_file_in="synthetic-dataset-blocks.%p.json";
44+
theConfig()->vt_lb_data_dir_in="synthetic-blocks-data";
45+
46+
// Replay load balancing
47+
int initial_phase = 0;
48+
int phases_to_run = 1;
49+
int phase_mod = 0;
50+
vt::vrt::collection::balance::replay::replayWorkloads(
51+
initial_phase, phases_to_run, phase_mod);
52+
53+
// Get information for the last phase (this problem only has one)
54+
auto phase_info = theLBManager()->getPhaseInfo();
55+
56+
// Assert that temperedLB found the correct imbalance
57+
auto imb = (phase_info->max_load / phase_info->avg_load) - 1;
58+
EXPECT_EQ(imb, expected_imb);
59+
60+
// Clear the LB config ahead of next test
61+
vrt::collection::balance::ReadLBConfig::clear();
62+
}
63+
64+
TEST_F(TestTemperedLB, test_load_only) {
65+
auto cfg = writeTemperedLBConfig("Original", false);
66+
runTemperedLBTest(cfg);
67+
}
68+
69+
TEST_F(TestTemperedLB, test_load_and_memory_swapclusters) {
70+
auto cfg = writeTemperedLBConfig("SwapClusters", true);
71+
runTemperedLBTest(cfg);
72+
}
73+
74+
TEST_F(TestTemperedLB, test_load_memory_homing_swapclusters) {
75+
auto cfg = writeTemperedLBConfig("SwapClusters", true, 1.0);
76+
runTemperedLBTest(cfg);
77+
}
78+
79+
TEST_F(TestTemperedLB, test_load_memory_homing_comms) {
80+
auto cfg = writeTemperedLBConfig("SwapClusters", true, 1.0, 1.0);
81+
double expected_imbalance = 0.25; // placeholder for value from MILP
82+
runTemperedLBTest(cfg, expected_imbalance);
83+
}
84+
85+
#endif
86+
87+
}}}} /* end namespace vt::tests::unit::lb */

0 commit comments

Comments
 (0)