From 3047625f7d4b3a77cb3a3480481122f7ba01be2d Mon Sep 17 00:00:00 2001 From: Jeremy Johnson Date: Mon, 20 Nov 2023 16:15:30 +0000 Subject: Adjust random data ranges for Main Compliance to avoid FP inf and nan POW - there are now 3 test sets to cover random ranges. Also added ROUND mode to data generator to force integer exponent values. LOG, EXP, RSQRT, REDUCE_SUM & FULLY_CONNECTED - have had their ranges reduced for each test. Fix generate library configuration defaults and checks. Signed-off-by: Jeremy Johnson Change-Id: Ie5d3bd78f690cc787a2ca4eb9b4bd6808bd9238c --- reference_model/src/generate/generate_dot_product.cc | 7 ++++++- reference_model/src/generate/generate_pseudo_random.cc | 5 +++++ reference_model/src/generate/generate_utils.cc | 16 ++++++++++++++++ reference_model/src/generate/generate_utils.h | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) (limited to 'reference_model/src') diff --git a/reference_model/src/generate/generate_dot_product.cc b/reference_model/src/generate/generate_dot_product.cc index 4054472..c8a2b13 100644 --- a/reference_model/src/generate/generate_dot_product.cc +++ b/reference_model/src/generate/generate_dot_product.cc @@ -387,7 +387,12 @@ bool generateDotProduct(const GenerateConfig& cfg, void* data, size_t size) if (!generator) { WARNING("[Generator][DP] Requested generator could not be created!"); - return 0; + return false; + } + if (cfg.dotProductInfo.ks <= 0) + { + WARNING("[Generator][DP] Invalid test set kernel size %d.", cfg.dotProductInfo.ks); + return false; } // Select which generator to use diff --git a/reference_model/src/generate/generate_pseudo_random.cc b/reference_model/src/generate/generate_pseudo_random.cc index d8d2288..b51424d 100644 --- a/reference_model/src/generate/generate_pseudo_random.cc +++ b/reference_model/src/generate/generate_pseudo_random.cc @@ -93,6 +93,7 @@ bool generateFP32(const TosaReference::GenerateConfig& cfg, void* data, size_t s const TosaReference::PseudoRandomInfo& prinfo = cfg.pseudoRandomInfo; PseudoRandomGeneratorFloat* generator; + bool roundMode = prinfo.round; if (prinfo.range.size() == 2) { @@ -117,6 +118,10 @@ bool generateFP32(const TosaReference::GenerateConfig& cfg, void* data, size_t s // Set every 4th value to 0 to enable better comparison testing a[t] = 0.f; } + else if (roundMode) + { + a[t] = std::roundf(a[t]); + } } return true; } diff --git a/reference_model/src/generate/generate_utils.cc b/reference_model/src/generate/generate_utils.cc index 1edc79d..58a3d33 100644 --- a/reference_model/src/generate/generate_utils.cc +++ b/reference_model/src/generate/generate_utils.cc @@ -116,6 +116,10 @@ void from_json(const nlohmann::json& j, PseudoRandomInfo& pseudoRandomInfo) { j.at("range").get_to(pseudoRandomInfo.range); } + if (j.contains("round")) + { + j.at("round").get_to(pseudoRandomInfo.round); + } } void from_json(const nlohmann::json& j, GenerateConfig& cfg) @@ -126,10 +130,22 @@ void from_json(const nlohmann::json& j, GenerateConfig& cfg) j.at("input_pos").get_to(cfg.inputPos); j.at("op").get_to(cfg.opType); j.at("generator").get_to(cfg.generatorType); + + // Set up defaults for dotProductInfo + cfg.dotProductInfo.s = -1; + cfg.dotProductInfo.ks = -1; + cfg.dotProductInfo.accType = DType_UNKNOWN; + cfg.dotProductInfo.kernel = std::vector(); + cfg.dotProductInfo.axis = -1; if (j.contains("dot_product_info")) { j.at("dot_product_info").get_to(cfg.dotProductInfo); } + + // Set up defaults for pseudoRandomInfo + cfg.pseudoRandomInfo.rngSeed = -1; + cfg.pseudoRandomInfo.range = std::vector(); + cfg.pseudoRandomInfo.round = false; if (j.contains("pseudo_random_info")) { j.at("pseudo_random_info").get_to(cfg.pseudoRandomInfo); diff --git a/reference_model/src/generate/generate_utils.h b/reference_model/src/generate/generate_utils.h index 8d0f654..f9ec713 100644 --- a/reference_model/src/generate/generate_utils.h +++ b/reference_model/src/generate/generate_utils.h @@ -62,6 +62,7 @@ struct PseudoRandomInfo int64_t rngSeed; std::vector range; + bool round; }; /// \brief Generator configuration -- cgit v1.2.1