diff options
Diffstat (limited to 'verif')
-rw-r--r-- | verif/generator/tosa_arg_gen.py | 56 | ||||
-rw-r--r-- | verif/generator/tosa_test_gen.py | 18 | ||||
-rw-r--r-- | verif/generator/tosa_utils.py | 35 |
3 files changed, 76 insertions, 33 deletions
diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py index cbfffae..c596645 100644 --- a/verif/generator/tosa_arg_gen.py +++ b/verif/generator/tosa_arg_gen.py @@ -828,6 +828,12 @@ class TosaTensorValuesGen: if "axis" in argsDict: info["axis"] = int(argsDict["axis"]) tens_meta["dot_product_info"] = info + elif dg_type == gtu.DataGenType.FULL_RANGE: + info = {} + info["start_val"] = int( + testGen.randInt(0, gtu.DTYPE_ATTRIBUTES[dtypeList[idx]]["fullset"]) + ) + tens_meta["full_range_info"] = info else: # TODO - other data gen type assert False, "TODO: support other data gen types" @@ -1795,7 +1801,7 @@ class TosaArgGen: pass @staticmethod - def _add_data_generators(testGen, opName, dtype, arg_list, error_name): + def _add_data_generators(testGen, opName, shapeList, dtype, arg_list, error_name): """Add extra tests for each type of data generator for this op.""" if ( error_name is None @@ -1820,7 +1826,16 @@ class TosaArgGen: new_arg_list = [] for dg_type in dataGenTypesList: for arg_str, args_dict in arg_list: - args_dict["dg_type"] = dg_type + + if dg_type == gtu.DataGenType.FULL_RANGE: + tensor_size = gtu.product(shapeList[0]) + if tensor_size >= gtu.DTYPE_ATTRIBUTES[dtype]["fullset"]: + # Large enough tensor data size for full range, add a single test + num_test_sets = 0 + else: + # Not enough data size for full range of values, revert to random numbers + dg_type = gtu.DataGenType.PSEUDO_RANDOM + if dg_type == gtu.DataGenType.PSEUDO_RANDOM: if error_name is None: num_test_sets = ( @@ -1829,6 +1844,7 @@ class TosaArgGen: else 0 ) else: + # Add single test for pseudo random num_test_sets = 0 elif dg_type == gtu.DataGenType.DOT_PRODUCT: @@ -1852,13 +1868,16 @@ class TosaArgGen: if num_test_sets > 0: for s in range(0, num_test_sets): - new_arg_str = f"{arg_str}_s{s}" if arg_str else f"s{s}" - new_args_dict = args_dict.copy() - new_args_dict["s"] = s - new_arg_list.append((new_arg_str, new_args_dict)) + set_arg_str = f"{arg_str}_s{s}" if arg_str else f"s{s}" + set_args_dict = args_dict.copy() + set_args_dict["s"] = s + set_args_dict["dg_type"] = dg_type + new_arg_list.append((set_arg_str, set_args_dict)) else: # Default is a single test - new_arg_list.append((arg_str, args_dict)) + new_args_dict = args_dict.copy() + new_args_dict["dg_type"] = dg_type + new_arg_list.append((arg_str, new_args_dict)) return new_arg_list @@ -1869,6 +1888,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, [("", {})], error_name, @@ -1883,6 +1903,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, [("", {"num_test_sets": 3})], error_name, @@ -1921,6 +1942,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2160,6 +2182,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtypes[0], arg_list, error_name, @@ -2194,6 +2217,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, input_dtype, arg_list, error_name, @@ -2246,6 +2270,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2402,6 +2427,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtypes[0], arg_list, error_name, @@ -2482,6 +2508,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2685,6 +2712,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2774,6 +2802,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2925,6 +2954,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, inDtype, arg_list, error_name, @@ -2947,6 +2977,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2967,6 +2998,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -2994,6 +3026,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3019,6 +3052,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3091,6 +3125,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3137,6 +3172,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3179,6 +3215,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3214,6 +3251,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3547,6 +3585,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3586,6 +3625,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3606,6 +3646,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, @@ -3624,6 +3665,7 @@ class TosaArgGen: arg_list = TosaArgGen._add_data_generators( testGen, opName, + shapeList, dtype, arg_list, error_name, diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py index 415858c..a1f54c6 100644 --- a/verif/generator/tosa_test_gen.py +++ b/verif/generator/tosa_test_gen.py @@ -365,7 +365,7 @@ class TosaTestGen: if "ksb" in argsDict else int(argsDict["ks"]), } - elif argsDict["dg_type"] == gtu.DataGenType.OP_SPECIAL: + elif argsDict["dg_type"] == gtu.DataGenType.SPECIAL: mode = gtu.ComplianceMode.FP_SPECIAL elif "compliance" in op and "ulp" in op["compliance"]: mode = gtu.ComplianceMode.ULP @@ -3959,7 +3959,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, }, "bitwise_not": { @@ -3996,7 +3996,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, "compliance": {"ulp": 0.5}, }, @@ -4055,7 +4055,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, }, "floor": { @@ -4075,7 +4075,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, "compliance": {"ulp": 0.5}, }, @@ -4096,7 +4096,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, "compliance": {"ulp": 5}, }, @@ -4137,7 +4137,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, }, "reciprocal": { @@ -4157,7 +4157,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, "compliance": {"ulp": 1.0}, }, @@ -4178,7 +4178,7 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, ), "data_gen": { - "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + "fp": (gtu.DataGenType.FULL_RANGE,), }, "compliance": {"ulp": 2}, }, diff --git a/verif/generator/tosa_utils.py b/verif/generator/tosa_utils.py index 384463f..6558bf8 100644 --- a/verif/generator/tosa_utils.py +++ b/verif/generator/tosa_utils.py @@ -13,22 +13,23 @@ MAX_RESIZE_DIMENSION = 16384 # Data type information dictionary # - str: filename abbreviation # - width: number of bytes needed for type +# - fullset: precalculated number of possible values in the data type's range, equal to 2^width # - json: JSON type string DTYPE_ATTRIBUTES = { - DType.BOOL: {"str": "b", "width": 1, "json": "BOOL"}, - DType.INT4: {"str": "i4", "width": 4, "json": "INT4"}, - DType.INT8: {"str": "i8", "width": 8, "json": "INT8"}, - DType.UINT8: {"str": "u8", "width": 8, "json": "UINT8"}, - DType.INT16: {"str": "i16", "width": 16, "json": "INT16"}, - DType.UINT16: {"str": "u16", "width": 16, "json": "UINT16"}, - DType.INT32: {"str": "i32", "width": 32, "json": "INT32"}, - DType.INT48: {"str": "i48", "width": 48, "json": "INT48"}, - DType.SHAPE: {"str": "s", "width": 64, "json": "SHAPE"}, - DType.FP16: {"str": "f16", "width": 16, "json": "FP16"}, - DType.BF16: {"str": "bf16", "width": 16, "json": "BF16"}, - DType.FP32: {"str": "f32", "width": 32, "json": "FP32"}, - DType.FP8E4M3: {"str": "f8e4m3", "width": 8, "json": "FP8E4M3"}, - DType.FP8E5M2: {"str": "f8e5m2", "width": 8, "json": "FP8E5M2"}, + DType.BOOL: {"str": "b", "width": 1, "fullset": 2, "json": "BOOL"}, + DType.INT4: {"str": "i4", "width": 4, "fullset": 16, "json": "INT4"}, + DType.INT8: {"str": "i8", "width": 8, "fullset": 256, "json": "INT8"}, + DType.UINT8: {"str": "u8", "width": 8, "fullset": 256, "json": "UINT8"}, + DType.INT16: {"str": "i16", "width": 16, "fullset": 65536, "json": "INT16"}, + DType.UINT16: {"str": "u16", "width": 16, "fullset": 65536, "json": "UINT16"}, + DType.INT32: {"str": "i32", "width": 32, "fullset": 1 << 32, "json": "INT32"}, + DType.INT48: {"str": "i48", "width": 48, "fullset": 1 << 48, "json": "INT48"}, + DType.SHAPE: {"str": "s", "width": 64, "fullset": 1 << 64, "json": "SHAPE"}, + DType.FP16: {"str": "f16", "width": 16, "fullset": 65536, "json": "FP16"}, + DType.BF16: {"str": "bf16", "width": 16, "fullset": 65536, "json": "BF16"}, + DType.FP32: {"str": "f32", "width": 32, "fullset": 1 << 32, "json": "FP32"}, + DType.FP8E4M3: {"str": "f8e4m3", "width": 8, "fullset": 256, "json": "FP8E4M3"}, + DType.FP8E5M2: {"str": "f8e5m2", "width": 8, "fullset": 256, "json": "FP8E5M2"}, } @@ -49,9 +50,9 @@ class DataGenType(IntEnum): PSEUDO_RANDOM = 0 DOT_PRODUCT = 1 - OP_BOUNDARY = 2 - OP_FULLSET = 3 - OP_SPECIAL = 4 + BOUNDARY = 2 + FULL_RANGE = 3 + SPECIAL = 4 FIXED_DATA = 5 |