def test_ifmap_size(self): ''' Get ifmap size. ''' clayer = ConvLayer(3, 64, [28, 14], 3, strd=2) self.assertEqual(clayer.ifmap_size(2), ((28 - 1) * 2 + 3) * ((14 - 1) * 2 + 3) * 2, 'ConvLayer: ifmap_size') self.assertEqual(clayer.total_ifmap_size(2), ((28 - 1) * 2 + 3) * ((14 - 1) * 2 + 3) * 3 * 2, 'ConvLayer: total_ifmap_size') llayer = LocalRegionLayer(64, 28, 1, 3, strd=2) self.assertEqual(llayer.ifmap_size(2), ((28 - 1) * 2 + 3)**2 * 2, 'LocalRegionLayer: ifmap_size') self.assertEqual(llayer.total_ifmap_size(2), ((28 - 1) * 2 + 3)**2 * 64 * 2, 'LocalRegionLayer: total_ifmap_size')
def test_nested_loop_desc_fold_w(self): ''' Generated nested loop description when folding width. ''' layer = self.convlayers['conv1'] batch_size = 4 occ = 1 ms = MapStrategyEyeriss(layer, batch_size, occ, self.dim_array) self.assertTupleEqual(ms.repl, (1, 1)) self.assertEqual(ms.fold.h, 1) self.assertGreater(ms.fold.w, 1) # Only 1 possible nld. nld_list = list(ms.gen_nested_loop_desc()) self.assertEqual(len(nld_list), 1) nld = nld_list[0] # Fold to batch size. fold_w = ms.fold.w folded_layer = ConvLayer(layer.nifm, layer.nofm, (util.idivc(layer.hofm, fold_w), layer.wofm), (layer.hfil, layer.wfil), strd=(layer.htrd, layer.wtrd)) folded_batch_size = batch_size * fold_w locc = layer.total_ops(batch_size) \ / folded_layer.total_ops(folded_batch_size) self.assertLessEqual(locc, 1) self.assertEqual(nld.loopcnt[le.IFM], folded_layer.nifm) self.assertEqual(nld.loopcnt[le.OFM], folded_layer.nofm) self.assertEqual(nld.loopcnt[le.BAT], folded_batch_size) self.assertEqual(nld.usize_gbuf[de.FIL], folded_layer.filter_size()) self.assertEqual(nld.usize_gbuf[de.IFM], folded_layer.ifmap_size()) self.assertEqual(nld.usize_gbuf[de.OFM], folded_layer.ofmap_size()) # DRAM and GBUF accesses are equal. self.assertTupleEqual(nld.unit_access[me.DRAM], nld.unit_access[me.GBUF])