Add type axis masking.

Allow types in a type_axis to be masked out, skipping all
benchmark configurations that use a masked out type.

This will allow the axis to be modified at runtime with CLI args.

Requires various changes to support mutable axes.
This commit is contained in:
Allison Vacanti
2021-02-02 18:24:26 -05:00
parent 6dd4bebe6e
commit 6aac1554d5
8 changed files with 384 additions and 34 deletions

View File

@@ -40,17 +40,45 @@ void test_single()
ASSERT(axis.get_size() == 1);
ASSERT(axis.get_input_string(0) == "I32");
ASSERT(axis.get_description(0) == "int32_t");
ASSERT(axis.get_is_active("I32") == true);
ASSERT(axis.get_is_active(0) == true);
const auto clone_base = axis.clone();
auto clone_base = axis.clone();
ASSERT(clone_base.get() != nullptr);
const auto *clone =
dynamic_cast<const nvbench::type_axis *>(clone_base.get());
auto *clone =
dynamic_cast<nvbench::type_axis *>(clone_base.get());
ASSERT(clone != nullptr);
ASSERT(clone->get_name() == "Single");
ASSERT(clone->get_size() == 1);
ASSERT(clone->get_input_string(0) == "I32");
ASSERT(clone->get_description(0) == "int32_t");
ASSERT(clone->get_is_active("I32") == true);
ASSERT(clone->get_is_active(0) == true);
clone->set_active_inputs({});
ASSERT(clone->get_name() == "Single");
ASSERT(clone->get_size() == 1);
ASSERT(clone->get_input_string(0) == "I32");
ASSERT(clone->get_description(0) == "int32_t");
ASSERT(clone->get_is_active("I32") == false);
ASSERT(clone->get_is_active(0) == false);
// The original property should not be modified:
ASSERT(axis.get_is_active("I32") == true);
ASSERT(axis.get_is_active(0) == true);
clone->set_active_inputs({"I32"});
ASSERT(clone->get_name() == "Single");
ASSERT(clone->get_size() == 1);
ASSERT(clone->get_input_string(0) == "I32");
ASSERT(clone->get_description(0) == "int32_t");
ASSERT(clone->get_is_active("I32") == true);
ASSERT(clone->get_is_active(0) == true);
// The original property should not be modified:
ASSERT(axis.get_is_active("I32") == true);
ASSERT(axis.get_is_active(0) == true);
ASSERT_THROWS_ANY(clone->set_active_inputs({"NotAValidEntry"}));
}
void test_several()
@@ -63,25 +91,69 @@ void test_several()
ASSERT(axis.get_size() == 3);
ASSERT(axis.get_input_string(0) == "I32");
ASSERT(axis.get_description(0) == "int32_t");
ASSERT(axis.get_is_active(0) == true);
ASSERT(axis.get_is_active("I32") == true);
ASSERT(axis.get_input_string(1) == "F64");
ASSERT(axis.get_description(1) == "double");
ASSERT(axis.get_is_active(1) == true);
ASSERT(axis.get_is_active("F64") == true);
ASSERT(axis.get_input_string(2) == "bool");
ASSERT(axis.get_description(2) == "");
ASSERT(axis.get_is_active(2) == true);
ASSERT(axis.get_is_active("bool") == true);
const auto clone_base = axis.clone();
auto clone_base = axis.clone();
ASSERT(clone_base.get() != nullptr);
const auto *clone =
dynamic_cast<const nvbench::type_axis *>(clone_base.get());
auto *clone =
dynamic_cast<nvbench::type_axis *>(clone_base.get());
ASSERT(clone != nullptr);
ASSERT(clone->get_name() == "Several");
ASSERT(clone->get_size() == 3);
ASSERT(clone->get_input_string(0) == "I32");
ASSERT(clone->get_description(0) == "int32_t");
ASSERT(clone->get_is_active(0) == true);
ASSERT(clone->get_is_active("I32") == true);
ASSERT(clone->get_input_string(1) == "F64");
ASSERT(clone->get_description(1) == "double");
ASSERT(clone->get_is_active(1) == true);
ASSERT(clone->get_is_active("F64") == true);
ASSERT(clone->get_input_string(2) == "bool");
ASSERT(clone->get_description(2) == "");
ASSERT(clone->get_is_active(2) == true);
ASSERT(clone->get_is_active("bool") == true);
clone->set_active_inputs({"I32", "bool"});
ASSERT(clone->get_name() == "Several");
ASSERT(clone->get_size() == 3);
ASSERT(clone->get_input_string(0) == "I32");
ASSERT(clone->get_description(0) == "int32_t");
ASSERT(clone->get_is_active(0) == true);
ASSERT(clone->get_is_active("I32") == true);
ASSERT(clone->get_input_string(1) == "F64");
ASSERT(clone->get_description(1) == "double");
ASSERT(clone->get_is_active(1) == false);
ASSERT(clone->get_is_active("F64") == false);
ASSERT(clone->get_input_string(2) == "bool");
ASSERT(clone->get_description(2) == "");
ASSERT(clone->get_is_active(2) == true);
ASSERT(clone->get_is_active("bool") == true);
// The cloned axis should not change:
ASSERT(axis.get_name() == "Several");
ASSERT(axis.get_size() == 3);
ASSERT(axis.get_input_string(0) == "I32");
ASSERT(axis.get_description(0) == "int32_t");
ASSERT(axis.get_is_active(0) == true);
ASSERT(axis.get_is_active("I32") == true);
ASSERT(axis.get_input_string(1) == "F64");
ASSERT(axis.get_description(1) == "double");
ASSERT(axis.get_is_active(1) == true);
ASSERT(axis.get_is_active("F64") == true);
ASSERT(axis.get_input_string(2) == "bool");
ASSERT(axis.get_description(2) == "");
ASSERT(axis.get_is_active(2) == true);
ASSERT(axis.get_is_active("bool") == true);
}
void test_get_type_index()