aboutsummaryrefslogtreecommitdiff
path: root/verif
diff options
context:
space:
mode:
authorJeremy Johnson <jeremy.johnson@arm.com>2024-02-01 15:54:07 +0000
committerJeremy Johnson <jeremy.johnson@arm.com>2024-02-08 11:14:04 +0000
commit32d0b5af61d978d9932ac5576b42203e57881168 (patch)
treeeb9f3d6d845edc0f53da06285db1e4736282b4c3 /verif
parent6f57e6e665094959aed40c0e388ac81fbd118720 (diff)
downloadreference_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.json5
-rw-r--r--verif/generator/tosa_arg_gen.py41
-rw-r--r--verif/generator/tosa_error_if.py6
-rw-r--r--verif/generator/tosa_test_gen.py51
-rw-r--r--verif/generator/tosa_utils.py1
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):