예제 #1
0
 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
예제 #2
0
    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)
예제 #5
0
 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