def fpmultiplier_estimate_energy(self, interface): this_dir, this_filename = os.path.split(__file__) action_name = interface['action_name'] if action_name == 'mult_gated': interface[ 'action_name'] = 'idle' # reflect gated multiplier energy nbit_exponent = interface['attributes']['exponent'] nbit_mantissa = interface['attributes']['mantissa'] nbit = nbit_mantissa + nbit_exponent if nbit_exponent + nbit_mantissa <= 32: csv_nbit = 32 csv_file_path = os.path.join(this_dir, 'data/fp_sp_multiplier.csv') else: csv_nbit = 64 csv_file_path = os.path.join(this_dir, 'data/fp_dp_multiplier.csv') energy = AladdinTable.query_csv_using_latency(interface, csv_file_path) if not nbit == csv_nbit: energy = oneD_quadratic_interpolation(nbit, [{ 'x': 0, 'y': 0 }, { 'x': csv_nbit, 'y': energy }]) if action_name == 'mult_reused': energy = 0.85 * energy return energy
def intmultiplier_estimate_energy(self, interface): this_dir, this_filename = os.path.split(__file__) nbit = interface['attributes']['datawidth'] action_name = interface['action_name'] if action_name == 'mult_gated': interface[ 'action_name'] = 'idle' # reflect gated multiplier energy csv_nbit = 32 csv_file_path = os.path.join(this_dir, 'data/multiplier.csv') energy = AladdinTable.query_csv_using_latency(interface, csv_file_path) if not nbit == csv_nbit: energy = oneD_quadratic_interpolation(nbit, [{ 'x': 0, 'y': 0 }, { 'x': csv_nbit, 'y': energy }]) if action_name == 'mult_reused': energy = 0.85 * energy if 'type' in interface['attributes'].keys() and \ interface['attributes']['type'] == 'fft': print('DEBUGGING: using fft type') energy = energy * 3 return energy
def intmultiplier_estimate_area(self, interface): this_dir, this_filename = os.path.split(__file__) nbit = interface['attributes']['datawidth'] csv_nbit = 32 csv_file_path = os.path.join(this_dir, 'data/multiplier.csv') area = AladdinAreaQueires.query_csv_area_using_latency( interface, csv_file_path) if not nbit == csv_nbit: area = oneD_quadratic_interpolation(nbit, [{ 'x': 0, 'y': 0 }, { 'x': csv_nbit, 'y': area }]) return area
def test_oneD_quad_interpolation(self): """ quadratic interpolation on one hardware attribute """ # Rough estimation of simple array multiplier: E_mult = E_full_adder * bitwidth^2 + E_misc E_full_adder = 4 E_misc = 2 bitwidth_0 = 32 bitwidth_1 = 8 energy_0 = E_full_adder * bitwidth_0**2 + E_misc energy_1 = E_full_adder * bitwidth_1**2 + E_misc bitwidth_desired = 16 # expected output energy_desired = E_full_adder * bitwidth_desired**2 + E_misc energy_interpolated = hf.oneD_quadratic_interpolation(bitwidth_desired,[{'x':bitwidth_0, 'y': energy_0}, {'x':bitwidth_1, 'y':energy_1}]) self.assertEqual(energy_interpolated, energy_desired)
def fpmultiplier_estimate_area(self, interface): this_dir, this_filename = os.path.split(__file__) nbit_exponent = interface['attributes']['exponent'] nbit_mantissa = interface['attributes']['mantissa'] nbit = nbit_mantissa + nbit_exponent if nbit_exponent + nbit_mantissa <= 32: csv_nbit = 32 csv_file_path = os.path.join(this_dir, 'data/fp_sp_multiplier.csv') else: csv_nbit = 64 csv_file_path = os.path.join(this_dir, 'data/fp_dp_multiplier.csv') area = AladdinAreaQueires.query_csv_area_using_latency( interface, csv_file_path) if not nbit == csv_nbit: area = oneD_quadratic_interpolation(nbit, [{ 'x': 0, 'y': 0 }, { 'x': csv_nbit, 'y': area }]) return area