From fe79accba2c220036c7b5ea0aa27bff5ef74ec73 Mon Sep 17 00:00:00 2001 From: Jeremy Johnson Date: Wed, 29 Nov 2023 15:57:58 +0000 Subject: Main Compliance testing support for RESHAPE Signed-off-by: Jeremy Johnson Change-Id: I750ef5d3c95daca10e7717437ed375a81b434582 --- reference_model/src/generate/generate_utils.cc | 1 + verif/conformance/tosa_main_profile_ops_info.json | 5 ++-- verif/generator/tosa_arg_gen.py | 20 +++++++++++--- verif/generator/tosa_test_gen.py | 33 ++++++++++++++++------- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/reference_model/src/generate/generate_utils.cc b/reference_model/src/generate/generate_utils.cc index d1758fc..bdc840d 100644 --- a/reference_model/src/generate/generate_utils.cc +++ b/reference_model/src/generate/generate_utils.cc @@ -64,6 +64,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM(Op, { Op::Op_PAD, "PAD" }, { Op::Op_POW, "POW" }, { Op::Op_RECIPROCAL, "RECIPROCAL" }, + { Op::Op_RESHAPE, "RESHAPE" }, { Op::Op_RSQRT, "RSQRT" }, { Op::Op_REDUCE_MAX, "REDUCE_MAX" }, { Op::Op_REDUCE_MIN, "REDUCE_MIN" }, diff --git a/verif/conformance/tosa_main_profile_ops_info.json b/verif/conformance/tosa_main_profile_ops_info.json index 960ad27..351c68d 100644 --- a/verif/conformance/tosa_main_profile_ops_info.json +++ b/verif/conformance/tosa_main_profile_ops_info.json @@ -1839,6 +1839,7 @@ "profile": [ "tosa-mi" ], + "support_for": [ "lazy_data_gen" ], "generation": { "standard": { "generator_args": [ @@ -1850,7 +1851,7 @@ "--target-dtype", "bf16", "--fp-values-range", - "-2.0,2.0", + "-max,max", "--num-rand-permutations", "2" ], @@ -1858,7 +1859,7 @@ "--target-dtype", "fp32", "--fp-values-range", - "-2.0,2.0", + "-max,max", "--target-shape", "1,1,65536,1", "--target-shape", diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py index c557207..8e88390 100644 --- a/verif/generator/tosa_arg_gen.py +++ b/verif/generator/tosa_arg_gen.py @@ -2584,8 +2584,8 @@ class TosaArgGen: # Check for duplicates found = False - for name, other_shape in arg_list: - if other_shape[0] == newShape: + for name, args_dict in arg_list: + if args_dict["new_shape"] == newShape: found = True break @@ -2620,16 +2620,28 @@ class TosaArgGen: new_shape_inferred[extra_dim] = -1 else: arg_list.append( - ("perm{}_rank{}_outdefined".format(p, newRank), [newShape]) + ( + "perm{}_rank{}_outdefined".format(p, newRank), + {"new_shape": newShape}, + ) ) if error_name != ErrorIf.TensorSizeInputOutputMismatch: arg_list.append( ( "perm{}_rank{}_outinferred".format(p, newRank), - [new_shape_inferred], + {"new_shape": new_shape_inferred}, ) ) + # Now add data generator types + arg_list = TosaArgGen._add_data_generators( + testGen, + opName, + dtype, + arg_list, + error_name, + ) + return arg_list @staticmethod diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py index 1602109..0a8d035 100644 --- a/verif/generator/tosa_test_gen.py +++ b/verif/generator/tosa_test_gen.py @@ -1526,14 +1526,19 @@ class TosaTestGen: self.ser.addOperator(op["op"], input_list, output_list, attr) return TosaTestGen.BuildInfo(result_tensor, None) - def build_reshape(self, op, a, newShape, validator_fcns=None, error_name=None): - result_tens = OutputShaper.reshapeOp( - self.ser, self.rng, a, newShape, error_name + def build_reshape( + self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None + ): + assert len(inputs) == 1 + a = inputs[0] + new_shape = args_dict["new_shape"] + result_tensor = OutputShaper.reshapeOp( + self.ser, self.rng, a, new_shape, error_name ) # Invalidate Input/Output list for error if checks. input_list = [a.name] - output_list = [result_tens.name] + output_list = [result_tensor.name] pCount, cCount = op["operands"] num_operands = pCount + cCount input_list, output_list = TosaErrorIfArgGen.eiInvalidateInputOutputList( @@ -1546,10 +1551,10 @@ class TosaTestGen: error_name, op=op, input_shape=a.shape, - output_shape=result_tens.shape, + output_shape=result_tensor.shape, input_dtype=a.dtype, - output_dtype=result_tens.dtype, - result_tensors=[result_tens], + output_dtype=result_tensor.dtype, + result_tensors=[result_tensor], input_list=input_list, output_list=output_list, num_operands=num_operands, @@ -1557,10 +1562,15 @@ class TosaTestGen: return None attr = ts.TosaSerializerAttribute() - attr.ReshapeAttribute(newShape) + attr.ReshapeAttribute(new_shape) self.ser.addOperator(op["op"], input_list, output_list, attr) - return result_tens + + compliance = self.tensorComplianceMetaData( + op, a.dtype, args_dict, result_tensor, error_name + ) + + return TosaTestGen.BuildInfo(result_tensor, compliance) def build_reverse( self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None @@ -4163,7 +4173,7 @@ class TosaTestGen: "build_fcn": ( build_reshape, TosaTensorGen.tgBasic, - TosaTensorValuesGen.tvgDefault, + TosaTensorValuesGen.tvgLazyGenDefault, TosaArgGen.agReshape, ), "types": TYPE_FIB, @@ -4176,6 +4186,9 @@ class TosaTestGen: TosaErrorValidator.evReshapeOutputSizeMultiInference, TosaErrorValidator.evReshapeOutputSizeNonInteger, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, "reverse": { "op": Op.REVERSE, -- cgit v1.2.1