def statistics(queue, table, scenario, flags): confs = list() dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: if flags[0]: queue.execute( "SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute( "SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute( "SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") line = queue.fetchall() confs.append([ dm[0], line[0][0], line[0][2], line[0][1], line[0][3], (line[0][2] - line[0][1]) / line[0][3] ]) return confs
def tune_no_reuse(queue, table, operator, scenario, flags): confs = list() if operator.casefold() == "max" or operator.casefold() == "min": condition = str() if flags[0] == 1: condition = "local = 1" elif flags[0] == 2: condition = "local = 0" if flags[1] == 1: if flags[0] != 0: condition += " AND splitBatches = 1" else: condition = "splitBatches = 1" elif flags[1] == 2: if flags[0] != 0: condition += " AND splitBatches = 0" else: condition = "splitBatches = 0" dms_range = manage.get_dm_range(queue, table,scenario) no_reuse = "(nrThreadsD1 = 1 AND nrItemsD1 = 1)" for dm in dms_range: if flags[0] == 0 and flags[1] == 0: queue.execute("SELECT splitBatches,local,unroll,nrThreadsD0,nrItemsD0,GFLOPs,time,time_err,cov FROM " + table + " WHERE (GFLOPs = (SELECT " + operator + "(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + "))) AND (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + ")") else: queue.execute("SELECT splitBatches,local,unroll,nrThreadsD0,nrItemsD0,GFLOPs,time,time_err,cov FROM " + table + " WHERE (GFLOPs = (SELECT " + operator + "(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + " AND (" + condition + ")))) AND (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + " AND (" + condition + "))") best = queue.fetchall() confs.append([dm[0], best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5], best[0][6], best[0][7], best[0][8]]) return confs
def optimization_space(queue, table, scenario, flags): confs = list() dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: if flags[0]: queue.execute( "SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute( "SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute( "SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") best = queue.fetchall() confs.append([ best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5] ]) return confs
def histogram(queue, table, scenario, flags): hists = list() dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: if flags[0]: queue.execute("SELECT MAX(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute("SELECT MAX(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute("SELECT MAX(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") maximum = int(queue.fetchall()[0][0]) hist = [0 for i in range(0, maximum + 1)] if flags[0]: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") flops = queue.fetchall() for flop in flops: hist[int(flop[0])] = hist[int(flop[0])] + 1 hists.append(hist) return hists
def statistics(queue, table, samples): confs = list() dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute("SELECT MIN(GBs),AVG(GBs),MAX(GBs),STDDEV_POP(GBs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") line = queue.fetchall() confs.append([dm[0], line[0][0], line[0][2], line[0][1], line[0][3], (line[0][2] - line[0][1]) / line[0][3]]) return confs
def optimization_space(queue, table, samples): confs = list() dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute("SELECT nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GBS FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") best = queue.fetchall() confs.append([best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5]]) return confs
def tune(queue, table, operator, samples): confs = list() if operator.casefold() == "max" or operator.casefold() == "min": dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute("SELECT nrThreadsD0,nrItemsD0,GBs,time,time_err,cov FROM " + table + " WHERE (GBs = (SELECT " + operator + "(GBs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + "))) AND (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") best = queue.fetchall() confs.append([dm[0], samples, best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5]]) return confs
def print_time(queue, table): confs = list() dms_range = manage.get_dm_range(queue, table) for dm in dms_range: internalConfs = list() period_range = manage.get_period_range(queue, table, str(dm[0])) for period in period_range: queue.execute("SELECT searchTime,inputHandling,dedispersion,transpose,snrD,folding,snrF,outputCopy FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND periods = " + str(period[0]) + ")") best = queue.fetchall() internalConfs.append([dm[0], period[0], best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5], best[0][6], best[0][7]]) confs.append(internalConfs) return confs
def statistics(queue, table, scenario, flags): confs = list() dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: if flags[0]: queue.execute("SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute("SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute("SELECT MIN(GFLOPs),AVG(GFLOPs),MAX(GFLOPs),STDDEV_POP(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") line = queue.fetchall() confs.append([dm[0], line[0][0], line[0][2], line[0][1], line[0][3], (line[0][2] - line[0][1]) / line[0][3]]) return confs
def optimization_space(queue, table, scenario, flags): confs = list() dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: if flags[0]: queue.execute("SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 1)") elif flags[1]: queue.execute("SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND local = 0)") else: queue.execute("SELECT local,nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") best = queue.fetchall() confs.append([best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5]]) return confs
def statistics(queue, table, samples): confs = list() dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute( "SELECT MIN(GBs),AVG(GBs),MAX(GBs),STDDEV_POP(GBs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") line = queue.fetchall() confs.append([ dm[0], line[0][0], line[0][2], line[0][1], line[0][3], (line[0][2] - line[0][1]) / line[0][3] ]) return confs
def tune(queue, table, operator): confs = list() if operator.casefold() == "max" or operator.casefold() == "min": dms_range = manage.get_dm_range(queue, table) for dm in dms_range: internal_list = list() period_range = manage.get_period_range(queue, table, dm[0]) for period in period_range: queue.execute("SELECT DMsPerBlock,PeriodsPerBlock,BinsPerBlock,DMsPerThread,PeriodsPerThread,BinsPerThread,vector,GFLOPS,time,time_err,cov FROM " + table + " WHERE (GFLOPS = (SELECT " + operator + "(GFLOPS) FROM " + table + " WHERE (nrDMs = " + str(dm[0]) + " AND nrPeriods = " + str(period[0]) + ")) AND (nrDMs = " + str(dm[0]) + " AND nrPeriods = " + str(period[0]) + "))") best = queue.fetchall() internal_list.append([dm[0], period[0], best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5], best[0][6], best[0][7], best[0][8], best[0][9], best[0][10]]) confs.append(internal_list) return confs
def histogram(queue, table, samples): hists = list() dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute("SELECT MAX(GBs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") maximum = int(queue.fetchall()[0][0]) hist = [0 for i in range(0, maximum + 1)] queue.execute("SELECT GBs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") flops = queue.fetchall() for flop in flops: hist[int(flop[0])] = hist[int(flop[0])] + 1 hists.append(hist) return hists
def optimization_space(queue, table, samples): confs = list() dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute( "SELECT nrThreadsD0,nrThreadsD1,nrItemsD0,nrItemsD1,GBS FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") best = queue.fetchall() confs.append([ best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5] ]) return confs
def single_parameter_space(queue, table, parameter, samples): confs = list() scenario = "(samples = " + samples + ")" dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: internalConf = list() queue.execute("SELECT DISTINCT " + parameter + " FROM " + table + " WHERE DMs = " + str(dm[0]) + " AND " + scenario + " ORDER BY " + parameter) values = queue.fetchall() for value in values: queue.execute("SELECT MAX(GBs) FROM " + table + " WHERE " + parameter + " = " + str(value[0]) + " AND DMs = " + str(dm[0]) + " AND " + scenario) best = queue.fetchall() internalConf.append([value[0], best[0][0]]) confs.append(internalConf) return confs
def percentiles(queue, table, scenario, flags): results = list() condition = str() if flags[0] == 1: condition = "local = 1" elif flags[0] == 2: condition = "local = 0" if flags[1] == 1: if flags[0] != 0: condition += " AND splitBatches = 1" else: condition = "splitBatches = 1" elif flags[1] == 2: if flags[0] != 0: condition += " AND splitBatches = 0" else: condition = "splitBatches = 0" dms_range = manage.get_dm_range(queue, table, scenario) for dm in dms_range: internalResults = list() internalResults.append(dm[0]) if flags[0] == 0 and flags[1] == 0: queue.execute("SELECT COUNT(id),MIN(GFLOPs),MAX(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ")") else: queue.execute("SELECT COUNT(id),MIN(GFLOPs),MAX(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + condition + ")") items = queue.fetchall() nrItems = items[0][0] internalResults.append(int(items[0][1])) internalResults.append(int(items[0][2])) if flags[0] == 0 and flags[1] == 0: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ") ORDER BY GFLOPs LIMIT " + str(int(nrItems / 4)) + ",1") else: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + condition + ") ORDER BY GFLOPs LIMIT " + str(int(nrItems / 4)) + ",1") items = queue.fetchall() internalResults.append(int(items[0][0])) if flags[0] == 0 and flags[1] == 0: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ") ORDER BY GFLOPs LIMIT " + str((int(nrItems / 4)) * 2) + ",1") else: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + condition + ") ORDER BY GFLOPs LIMIT " + str((int(nrItems / 4)) * 2) + ",1") items = queue.fetchall() internalResults.append(int(items[0][0])) if flags[0] == 0 and flags[1] == 0: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + ") ORDER BY GFLOPs LIMIT " + str((int(nrItems / 4)) * 3) + ",1") else: queue.execute("SELECT GFLOPs FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + condition + ") ORDER BY GFLOPs LIMIT " + str((int(nrItems / 4)) * 3) + ",1") items = queue.fetchall() internalResults.append(int(items[0][0])) results.append(internalResults) return results
def tune(queue, table, operator, samples): confs = list() if operator.casefold() == "max" or operator.casefold() == "min": dms_range = manage.get_dm_range(queue, table, samples) for dm in dms_range: queue.execute( "SELECT nrThreadsD0,nrItemsD0,GBs,time,time_err,cov FROM " + table + " WHERE (GBs = (SELECT " + operator + "(GBs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND samples = " + samples + "))) AND (DMs = " + str(dm[0]) + " AND samples = " + samples + ")") best = queue.fetchall() confs.append([ dm[0], samples, best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5] ]) return confs
def print_time(queue, table): confs = list() dms_range = manage.get_dm_range(queue, table) for dm in dms_range: internalConfs = list() period_range = manage.get_period_range(queue, table, str(dm[0])) for period in period_range: queue.execute( "SELECT searchTime,inputHandling,dedispersion,transpose,snrD,folding,snrF,outputCopy FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND periods = " + str(period[0]) + ")") best = queue.fetchall() internalConfs.append([ dm[0], period[0], best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5], best[0][6], best[0][7] ]) confs.append(internalConfs) return confs
def tune_no_reuse(queue, table, operator, scenario, flags): confs = list() if operator.casefold() == "max" or operator.casefold() == "min": condition = str() if flags[0] == 1: condition = "local = 1" elif flags[0] == 2: condition = "local = 0" if flags[1] == 1: if flags[0] != 0: condition += " AND splitBatches = 1" else: condition = "splitBatches = 1" elif flags[1] == 2: if flags[0] != 0: condition += " AND splitBatches = 0" else: condition = "splitBatches = 0" dms_range = manage.get_dm_range(queue, table, scenario) no_reuse = "(nrThreadsD1 = 1 AND nrItemsD1 = 1)" for dm in dms_range: if flags[0] == 0 and flags[1] == 0: queue.execute( "SELECT splitBatches,local,unroll,nrThreadsD0,nrItemsD0,GFLOPs,time,time_err,cov FROM " + table + " WHERE (GFLOPs = (SELECT " + operator + "(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + "))) AND (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + ")") else: queue.execute( "SELECT splitBatches,local,unroll,nrThreadsD0,nrItemsD0,GFLOPs,time,time_err,cov FROM " + table + " WHERE (GFLOPs = (SELECT " + operator + "(GFLOPs) FROM " + table + " WHERE (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + " AND (" + condition + ")))) AND (DMs = " + str(dm[0]) + " AND " + scenario + " AND " + no_reuse + " AND (" + condition + "))") best = queue.fetchall() confs.append([ dm[0], best[0][0], best[0][1], best[0][2], best[0][3], best[0][4], best[0][5], best[0][6], best[0][7], best[0][8] ]) return confs