diff options
author | Jeremy Johnson <jeremy.johnson@arm.com> | 2024-02-01 15:54:07 +0000 |
---|---|---|
committer | Jeremy Johnson <jeremy.johnson@arm.com> | 2024-02-08 11:14:04 +0000 |
commit | 32d0b5af61d978d9932ac5576b42203e57881168 (patch) | |
tree | eb9f3d6d845edc0f53da06285db1e4736282b4c3 /verif | |
parent | 6f57e6e665094959aed40c0e388ac81fbd118720 (diff) | |
download | reference_model-32d0b5af61d978d9932ac5576b42203e57881168.tar.gz |
Main Compliance: Add RESIZE support
Add RELATIVE verify mode for RESIZE.
Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: I4fe352579507211dae7a048bf080c24426ce42a2
Diffstat (limited to 'verif')
-rw-r--r-- | verif/conformance/tosa_main_profile_ops_info.json | 5 | ||||
-rw-r--r-- | verif/generator/tosa_arg_gen.py | 41 | ||||
-rw-r--r-- | verif/generator/tosa_error_if.py | 6 | ||||
-rw-r--r-- | verif/generator/tosa_test_gen.py | 51 | ||||
-rw-r--r-- | verif/generator/tosa_utils.py | 1 |
5 files changed, 74 insertions, 30 deletions
diff --git a/verif/conformance/tosa_main_profile_ops_info.json b/verif/conformance/tosa_main_profile_ops_info.json index b8efd35..dc28bef 100644 --- a/verif/conformance/tosa_main_profile_ops_info.json +++ b/verif/conformance/tosa_main_profile_ops_info.json @@ -2645,6 +2645,7 @@ "profile": [ "tosa-mi" ], + "support_for": [ "lazy_data_gen" ], "generation": { "standard": { "negative_dim_range": "1,10", @@ -2657,13 +2658,13 @@ "--target-dtype", "bf16", "--fp-values-range", - "-2.0,2.0" + "-max,max" ], [ "--target-dtype", "fp32", "--fp-values-range", - "-2.0,2.0", + "-max,max", "--target-shape", "1,1103,1,2", "--max-resize-output-dim", diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py index a4bced3..4630f35 100644 --- a/verif/generator/tosa_arg_gen.py +++ b/verif/generator/tosa_arg_gen.py @@ -1394,6 +1394,22 @@ class TosaTensorValuesGen: testGen, opName, dtypeList, shapeList, argsDict, error_name ) + @staticmethod + def tvgResize(testGen, opName, dtypeList, shapeList, argsDict, error_name=None): + data_range = TosaTensorValuesGen._get_data_range( + testGen, + dtypeList[0], + TosaTensorValuesGen.TVG_FLOAT_HIGH_VALUE, + ) + if data_range: + argsDict["data_range"] = data_range + # Needed for compliance + argsDict["max_abs_value"] = data_range[1] + + return TosaTensorValuesGen.tvgLazyGenDefault( + testGen, opName, dtypeList, shapeList, argsDict, error_name + ) + # Set the POW exponent high data range TVG_FLOAT_HIGH_VALUE_POW_EXP = { DType.FP32: 10.0, @@ -3343,14 +3359,13 @@ class TosaArgGen: border[0], border[1], ), - [ - mode, - scale, - offset, - border, - dtype, - outputDTypeNew, - ], + { + "mode": mode, + "scale": scale, + "offset": offset, + "border": border, + "output_dtype": outputDTypeNew, + }, ) if arg_to_append in arg_list: # Skip already generated test params @@ -3359,6 +3374,16 @@ class TosaArgGen: # Valid permutation perm += 1 arg_list.append(arg_to_append) + + # Now add data generator types + arg_list = TosaArgGen._add_data_generators( + testGen, + opName, + dtype, + arg_list, + error_name, + ) + # Return list of tuples: (arg_str, args_dict) return arg_list @staticmethod diff --git a/verif/generator/tosa_error_if.py b/verif/generator/tosa_error_if.py index 90c3428..5fd647a 100644 --- a/verif/generator/tosa_error_if.py +++ b/verif/generator/tosa_error_if.py @@ -2585,9 +2585,9 @@ class TosaInvalidValidator: @staticmethod def ivWrongDataTypeOrModeResize(**kwargs): input_dtype = kwargs["input_dtype"] - args = kwargs["args"] - mode = args[0] - output_dtype = args[5] + args_dict = kwargs["args"] + mode = args_dict["mode"] + output_dtype = args_dict["output_dtype"] if mode == ResizeMode.BILINEAR: # Invalid output data type / Invalid input datatype diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py index d82f919..ae689b4 100644 --- a/verif/generator/tosa_test_gen.py +++ b/verif/generator/tosa_test_gen.py @@ -357,6 +357,12 @@ class TosaTestGen: elif "compliance" in op and "ulp" in op["compliance"]: mode = gtu.ComplianceMode.ULP compliance_tens["ulp_info"] = {"ulp": op["compliance"]["ulp"]} + elif "compliance" in op and "relative" in op["compliance"]: + mode = gtu.ComplianceMode.RELATIVE + compliance_tens["relative_info"] = { + "max": argsDict["max_abs_value"], + "scale": op["compliance"]["relative"], + } elif op["op"] == Op.REDUCE_PRODUCT: mode = gtu.ComplianceMode.REDUCE_PRODUCT compliance_tens["reduce_product_info"] = {"n": argsDict["n"]} @@ -1933,17 +1939,21 @@ class TosaTestGen: def build_resize( self, op, - input, - mode, - scale, - offset, - border, - input_dtype, - output_dtype, + inputs, + args_dict, validator_fcns, error_name=None, + qinfo=None, ): - result_tens = OutputShaper.resizeOp( + assert len(inputs) == 1 + input = inputs[0] + mode = args_dict["mode"] + scale = args_dict["scale"] + offset = args_dict["offset"] + border = args_dict["border"] + output_dtype = args_dict["output_dtype"] + + result_tensor = OutputShaper.resizeOp( self.ser, self.rng, input, @@ -1951,14 +1961,14 @@ class TosaTestGen: scale, offset, border, - input_dtype, + input.dtype, output_dtype, error_name, ) # Invalidate Input/Output list for error if checks. input_list = [input.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( @@ -1972,25 +1982,28 @@ class TosaTestGen: op=op, mode=mode, scale=scale, - input_dtype=input_dtype, + input_dtype=input.dtype, output_dtype=output_dtype, input_shape=input.shape, - output_shape=result_tens.shape, + output_shape=result_tensor.shape, offset=offset, border=border, input_list=input_list, output_list=output_list, - result_tensors=[result_tens], + result_tensors=[result_tensor], num_operands=num_operands, ): return None attr = ts.TosaSerializerAttribute() - attr.ResizeAttribute(scale, offset, border, mode) - self.ser.addOperator(op["op"], input_list, output_list, attr) - return result_tens + + compliance = self.tensorComplianceMetaData( + op, input.dtype, args_dict, result_tensor, error_name + ) + + return TosaTestGen.BuildInfo(result_tensor, compliance) def build_identityn(self, op, val, val2, validator_fcns=None, error_name=None): result_tens = OutputShaper.unaryOp(self.ser, self.rng, val, error_name) @@ -4610,7 +4623,7 @@ class TosaTestGen: "build_fcn": ( build_resize, TosaTensorGen.tgNHWC, - TosaTensorValuesGen.tvgDefault, + TosaTensorValuesGen.tvgResize, TosaArgGen.agResize, ), "types": (DType.INT8, DType.INT16, DType.FP16, DType.BF16, DType.FP32), @@ -4636,6 +4649,10 @@ class TosaTestGen: TosaErrorValidator.evResizeOutputShapeMismatch, TosaErrorValidator.evResizeOutputShapeNonInteger, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, + "compliance": {"relative": 0.006}, }, # Type conversion "cast": { diff --git a/verif/generator/tosa_utils.py b/verif/generator/tosa_utils.py index 6387d06..76e7388 100644 --- a/verif/generator/tosa_utils.py +++ b/verif/generator/tosa_utils.py @@ -39,6 +39,7 @@ class ComplianceMode(IntEnum): FP_SPECIAL = 3 REDUCE_PRODUCT = 4 ABS_ERROR = 5 + RELATIVE = 6 class DataGenType(IntEnum): |