From a61724ece50ab895a67bc15ae3a132d0ecbe61bc Mon Sep 17 00:00:00 2001 From: cnugteren Date: Mon, 11 Apr 2016 22:27:44 -0600 Subject: Fixed the way the defaults are calculated in the database; added warning for non-matching tuner arguments --- scripts/database/database.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'scripts') diff --git a/scripts/database/database.py b/scripts/database/database.py index b3f919ef..7fd8c4d8 100644 --- a/scripts/database/database.py +++ b/scripts/database/database.py @@ -34,9 +34,9 @@ DEVICENAME_DEFAULT = "default" # Attributes DEVICETYPE_ATTRIBUTES = ["device_vendor", "device_type"] DEVICE_ATTRIBUTES = ["device", "device_core_clock", "device_compute_units"] -KERNEL_ATTRIBUTES = ["precision", "kernel_family", - "arg_m", "arg_n", "arg_k", "arg_alpha", "arg_beta"] -ATTRIBUTES = DEVICE_ATTRIBUTES + DEVICETYPE_ATTRIBUTES + KERNEL_ATTRIBUTES +KERNEL_ATTRIBUTES = ["precision", "kernel_family"] +ARGUMENT_ATTRIBUTES = ["arg_m", "arg_n", "arg_k", "arg_alpha", "arg_beta"] +ATTRIBUTES = DEVICE_ATTRIBUTES + DEVICETYPE_ATTRIBUTES + KERNEL_ATTRIBUTES + ARGUMENT_ATTRIBUTES # OpenCL vendor names and their short name VENDOR_NAMES = { "device_vendor": { @@ -98,6 +98,10 @@ def RemoveEntriesByDevice(df, devicename): def GetEntriesByField(df, field, value): return df[df[field] == value] +def UpdateDatabase(df, condition, field, value): + df.loc[condition, field] = value + return df + # Fixes the problem that some vendors use multiple different names def SanitizeVendorNames(df): df = df.replace(VENDOR_NAMES) @@ -120,7 +124,7 @@ def CalculateDefaults(df): dfdefault = pd.DataFrame() # Defaults per type/vendor - groups = df.groupby(DEVICETYPE_ATTRIBUTES+KERNEL_ATTRIBUTES+["kernel"]) + groups = df.groupby(DEVICETYPE_ATTRIBUTES+KERNEL_ATTRIBUTES+ARGUMENT_ATTRIBUTES+["kernel"]) for name, dfgroup in groups: default_values = dfgroup.min(axis=0) default_values["device"] = DEVICENAME_DEFAULT @@ -129,8 +133,14 @@ def CalculateDefaults(df): default_values["time"] = 0.0 dfdefault = dfdefault.append(default_values, ignore_index=True) + # Checks for mis-matched arguments + groups = dfdefault.groupby(DEVICETYPE_ATTRIBUTES+KERNEL_ATTRIBUTES+["kernel"]) + for name, dfgroup in groups: + if len(dfgroup) != 1: + print("[WARNING] Entries for a single kernel with multiple argument values") + # Defaults in general - groups = df.groupby(KERNEL_ATTRIBUTES+["kernel"]) + groups = df.groupby(KERNEL_ATTRIBUTES+ARGUMENT_ATTRIBUTES+["kernel"]) for name, dfgroup in groups: default_values = dfgroup.min(axis=0) default_values["device_vendor"] = VENDOR_DEFAULT @@ -273,7 +283,6 @@ for file_json in glob.glob(glob_json): new_size = len(database.index) print("with "+str(new_size-old_size)+" new items") - # Stores the modified database back to disk if len(glob.glob(glob_json)) >= 1: print("## Storing the database to disk...") -- cgit v1.2.3