示例#1
0
    def test_total_proc_time(self):
        ''' Accessor total_proc_time. '''
        result = SchedulingResult(scheme=self.scheme,
                                  ofmap_layout=self.ofmap_layout,
                                  sched_seq=self.sched_seq)
        self.assertAlmostEqual(result.total_proc_time, 59)

        scheme = self.scheme
        scheme['bus_time'] = 100
        result = SchedulingResult(scheme=scheme,
                                  ofmap_layout=self.ofmap_layout,
                                  sched_seq=self.sched_seq)
        self.assertAlmostEqual(result.total_proc_time, 59)
示例#2
0
    def test_invalid_sched_seq(self):
        ''' Invalid sched_seq. '''
        with self.assertRaisesRegexp(TypeError,
                                     'SchedulingResult: .*sched_seq.*'):
            _ = SchedulingResult(scheme=self.scheme,
                                 ofmap_layout=self.ofmap_layout,
                                 sched_seq=list(self.sched_seq))

        with self.assertRaisesRegexp(ValueError,
                                     'SchedulingResult: .*sched_seq.*'):
            _ = SchedulingResult(scheme=self.scheme,
                                 ofmap_layout=self.ofmap_layout,
                                 sched_seq=self.sched_seq[:-1])
示例#3
0
 def test_invalid_ofmap_layout(self):
     ''' Invalid ofmap_layout. '''
     with self.assertRaisesRegexp(TypeError,
                                  'SchedulingResult: .*ofmap_layout.*'):
         _ = SchedulingResult(scheme=self.scheme,
                              ofmap_layout=None,
                              sched_seq=self.sched_seq)
 def test_invalid_dict_loop(self):
     ''' Invalid dict_loop. '''
     with self.assertRaisesRegexp(TypeError,
                                  'SchedulingResult: .*dict_loop.*'):
         _ = SchedulingResult(dict_loop={},
                              dict_part=self.dict_part,
                              ofmap_layout=self.ofmap_layout)
 def test_invalid_ofmap_layout(self):
     ''' Invalid ofmap_layout. '''
     with self.assertRaisesRegexp(TypeError,
                                  'SchedulingResult: .*ofmap_layout.*'):
         _ = SchedulingResult(dict_loop=self.dict_loop,
                              dict_part=self.dict_part,
                              ofmap_layout=None)
示例#6
0
 def test_invalid_scheme(self):
     ''' Invalid scheme. '''
     with self.assertRaisesRegexp(TypeError,
                                  'SchedulingResult: .*scheme.*'):
         _ = SchedulingResult(scheme={},
                              ofmap_layout=self.ofmap_layout,
                              sched_seq=self.sched_seq)
    def setUp(self):
        self.network = Network('test_net')
        self.network.set_input(InputLayer(3, 224))
        self.network.add('c1', ConvLayer(3, 64, 224, 3))
        self.network.add('p1', PoolingLayer(64, 7, 32), prevs='c1')
        self.network.add('p2', PoolingLayer(64, 7, 32), prevs='c1')
        self.network.add('f1', FCLayer(64, 1000, 7), prevs=['p1', 'p2'])

        self.batch_size = 4

        self.input_layout = partition.get_ofmap_layout(
            self.network.input_layer(), self.batch_size,
            PartitionScheme(order=range(pe.NUM), pdims=[(1, 1)] * pe.NUM),
            NodeRegion(origin=PhyDim2(0, 0), dim=PhyDim2(2, 1),
                       type=NodeRegion.DATA))

        self.c1res = SchedulingResult(
            dict_loop=OrderedDict([('cost', 1.), ('time', 2.), ('ops', 4.),
                                   ('access', [[7, 8, 9]] * me.NUM),
                                  ]),
            dict_part=OrderedDict([('cost', 0.5), ('total_nhops', [4, 5, 6]),
                                   ('num_nodes', 4),
                                  ]),
            ofmap_layout=partition.get_ofmap_layout(
                self.network['c1'], self.batch_size,
                PartitionScheme(order=range(pe.NUM), pdims=[(1, 1)] * pe.NUM),
                NodeRegion(origin=PhyDim2(0, 0), dim=PhyDim2(1, 2),
                           type=NodeRegion.DATA)))

        self.pres = SchedulingResult(
            dict_loop=OrderedDict([('cost', 0.1), ('time', 0.05), ('ops', 0.1),
                                   ('access', [[.7, .8, .9]] * me.NUM),
                                  ]),
            dict_part=OrderedDict([('cost', 0.5), ('total_nhops', [.4, .5, .6]),
                                   ('num_nodes', 2),
                                  ]),
            ofmap_layout=partition.get_ofmap_layout(
                self.network['p1'], self.batch_size,
                PartitionScheme(order=range(pe.NUM), pdims=[(1, 1)] * pe.NUM),
                NodeRegion(origin=PhyDim2(0, 0), dim=PhyDim2(1, 2),
                           type=NodeRegion.DATA)))

        self.dtfl = NNDataflowScheme(self.network, self.input_layout)
        self.dtfl['c1'] = self.c1res
        self.dtfl['p1'] = self.pres
        self.dtfl['p2'] = self.pres
 def test_valid_args(self):
     ''' Valid arguments. '''
     result = SchedulingResult(dict_loop=self.dict_loop,
                               dict_part=self.dict_part,
                               ofmap_layout=self.ofmap_layout)
     self.assertIn('ops', result.dict_loop)
     self.assertIn('total_nhops', result.dict_part)
     self.assertEqual(result.ofmap_layout, self.ofmap_layout)
示例#9
0
 def test_total_accesses_rgbuf(self):
     ''' Accessor total_accesses remote gbuf. '''
     scheme = self.scheme.copy()
     scheme['remote_gbuf_access'] = [10, 20, 30]
     result = SchedulingResult(scheme=scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertSequenceEqual(result.total_accesses,
                              [9, 120 + 60, 1500, 18000])
示例#10
0
    def test_total_time(self):
        ''' Accessor total_time. '''
        result = SchedulingResult(scheme=self.scheme,
                                  ofmap_layout=self.ofmap_layout,
                                  sched_seq=self.sched_seq)
        self.assertAlmostEqual(result.total_time, 123.4)

        self.assertGreaterEqual(result.total_time, result.total_node_time)
        self.assertGreaterEqual(result.total_time, result.total_dram_time)
示例#11
0
 def test_valid_args(self):
     ''' Valid arguments. '''
     result = SchedulingResult(scheme=self.scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertIn('ops', result.scheme)
     self.assertIn('total_nhops', result.scheme)
     self.assertEqual(result.ofmap_layout, self.ofmap_layout)
     self.assertTupleEqual(result.sched_seq, self.sched_seq)
 def _make_sched_res(self,
                     sched_seq,
                     time,
                     top_ti=1,
                     top_to=1,
                     top_tb=1,
                     top_ord=range(le.NUM),
                     dram_time=0,
                     num_nodes=4):
     scheme = OrderedDict()
     scheme['cost'] = 1.234 + 9.876
     scheme['time'] = max(time, dram_time)
     scheme['num_nodes'] = num_nodes
     scheme['proc_time'] = time
     scheme['bus_time'] = 0
     scheme['dram_time'] = dram_time
     scheme['ti'] = [top_ti, 1, 1]
     scheme['to'] = [top_to, 1, 1]
     scheme['tb'] = [top_tb, 1, 1]
     scheme['tvals'] = [[top_ti, top_to, top_tb], [1] * 3, [1] * 3]
     scheme['orders'] = [top_ord, range(le.NUM), range(le.NUM)]
     return SchedulingResult(scheme=scheme,
                             ofmap_layout=self.ofmap_layout,
                             sched_seq=sched_seq)
示例#13
0
 def test_total_cost(self):
     ''' Accessor total_cost. '''
     result = SchedulingResult(scheme=self.scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertAlmostEqual(result.total_cost, 1.234 + 9.876)
    def setUp(self):
        self.network = Network('test_net')
        self.network.set_input_layer(InputLayer(3, 224))
        self.network.add('c1', ConvLayer(3, 64, 224, 3))
        self.network.add('p1', PoolingLayer(64, 7, 32), prevs='c1')
        self.network.add('p2', PoolingLayer(64, 7, 32), prevs='c1')
        self.network.add('f1', FCLayer(128, 1000, 7), prevs=['p1', 'p2'])

        self.batch_size = 4

        input_layer = self.network.input_layer()
        self.input_layout = DataLayout(
            frngs=(FmapRange((0, 0, 0, 0),
                             FmapPosition(b=self.batch_size,
                                          n=input_layer.nofm,
                                          h=input_layer.hofm,
                                          w=input_layer.wofm)), ),
            regions=(NodeRegion(origin=PhyDim2(0, 0),
                                dim=PhyDim2(2, 1),
                                type=NodeRegion.DRAM), ),
            parts=(PartitionScheme(order=range(pe.NUM),
                                   pdims=[(1, 1)] * pe.NUM), ))

        c1_layer = self.network['c1']
        self.c1res = SchedulingResult(
            scheme=OrderedDict([
                ('cost', 1.5),
                ('time', 200.),
                ('ops', 4.),
                ('num_nodes', 4),
                ('cost_op', 0.5),
                ('cost_access', 1.),
                ('cost_noc', 0),
                ('cost_static', 0),
                ('proc_time', 200),
                ('bus_time', 0),
                ('dram_time', 0),
                ('access', [[7, 8, 9]] * me.NUM),
                ('remote_gbuf_access', [0] * 3),
                ('total_nhops', [4, 5, 6]),
                ('fetch', [[1, 1, 1], [2, 2, 2]]),
                ('ti', [2, 2, 3]),
                ('to', [1, 2, 3]),
                ('tb', [1, 2, 3]),
                ('tvals', [[2, 1, 1], [2, 2, 2], [3, 3, 3]]),
                ('orders', [range(3)] * 2),
            ]),
            ofmap_layout=DataLayout(
                frngs=(FmapRange(
                    (0, 0, 0, 0),
                    FmapPosition(b=self.batch_size,
                                 n=c1_layer.nofm,
                                 h=c1_layer.hofm,
                                 w=c1_layer.wofm)), ),
                regions=(NodeRegion(origin=PhyDim2(0, 0),
                                    dim=PhyDim2(1, 2),
                                    type=NodeRegion.DRAM), ),
                parts=(PartitionScheme(order=range(pe.NUM),
                                       pdims=[(1, 1)] * pe.NUM), )),
            sched_seq=(0, 0, 0))

        p1_layer = self.network['p1']
        self.p1res = SchedulingResult(
            scheme=OrderedDict([
                ('cost', 0.6),
                ('time', 5),
                ('ops', 0.1),
                ('num_nodes', 2),
                ('cost_op', 0.1),
                ('cost_access', 0.5),
                ('cost_noc', 0),
                ('cost_static', 0),
                ('proc_time', 5),
                ('bus_time', 0),
                ('dram_time', 0),
                ('access', [[.7, .8, .9]] * me.NUM),
                ('remote_gbuf_access', [0] * 3),
                ('total_nhops', [.4, .5, .6]),
                ('fetch', [[1, 1, 1], [2, 2, 2]]),
                ('ti', [2, 2, 3]),
                ('to', [1, 2, 3]),
                ('tb', [1, 2, 3]),
                ('tvals', [[2, 1, 1], [2, 2, 2], [3, 3, 3]]),
                ('orders', [range(3)] * 2),
            ]),
            ofmap_layout=DataLayout(
                frngs=(FmapRange(
                    (0, 0, 0, 0),
                    FmapPosition(b=self.batch_size,
                                 n=p1_layer.nofm,
                                 h=p1_layer.hofm,
                                 w=p1_layer.wofm)), ),
                regions=(NodeRegion(origin=PhyDim2(0, 0),
                                    dim=PhyDim2(1, 2),
                                    type=NodeRegion.DRAM), ),
                parts=(PartitionScheme(order=range(pe.NUM),
                                       pdims=[(1, 1)] * pe.NUM), )),
            sched_seq=(0, 1, 0))

        self.p2res = SchedulingResult(scheme=self.p1res.scheme,
                                      ofmap_layout=self.p1res.ofmap_layout,
                                      sched_seq=(0, 2, 0))

        self.dtfl = NNDataflowScheme(self.network, self.input_layout)
        self.dtfl['c1'] = self.c1res
        self.dtfl['p1'] = self.p1res
        self.dtfl['p2'] = self.p2res
 def test_total_ops(self):
     ''' Accessor total_ops. '''
     result = SchedulingResult(dict_loop=self.dict_loop,
                               dict_part=self.dict_part,
                               ofmap_layout=self.ofmap_layout)
     self.assertEqual(result.total_ops, 1234)
 def test_total_time(self):
     ''' Accessor total_time. '''
     result = SchedulingResult(dict_loop=self.dict_loop,
                               dict_part=self.dict_part,
                               ofmap_layout=self.ofmap_layout)
     self.assertAlmostEqual(result.total_time, 123.4)
 def test_total_cost(self):
     ''' Accessor total_cost. '''
     result = SchedulingResult(dict_loop=self.dict_loop,
                               dict_part=self.dict_part,
                               ofmap_layout=self.ofmap_layout)
     self.assertAlmostEqual(result.total_cost, 1.234 + 9.876)
示例#18
0
 def test_total_accesses(self):
     ''' Accessor total_cost. '''
     result = SchedulingResult(scheme=self.scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertSequenceEqual(result.total_accesses, [9, 120, 1500, 18000])
 def test_total_accesses(self):
     ''' Accessor total_cost. '''
     result = SchedulingResult(dict_loop=self.dict_loop,
                               dict_part=self.dict_part,
                               ofmap_layout=self.ofmap_layout)
     self.assertSequenceEqual(result.total_accesses, [9, 120, 1500, 18000])
示例#20
0
 def test_total_noc_hops(self):
     ''' Accessor total_noc_hops. '''
     result = SchedulingResult(scheme=self.scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertEqual(result.total_noc_hops, 1368)
示例#21
0
 def test_num_nodes(self):
     ''' Accessor num_nodes. '''
     result = SchedulingResult(scheme=self.scheme,
                               ofmap_layout=self.ofmap_layout,
                               sched_seq=self.sched_seq)
     self.assertEqual(result.num_nodes, 4)