def test_ofmap_size(self): ''' Get ofmap size. ''' clayer = ConvLayer(3, 64, [28, 14], 3) self.assertEqual(clayer.ofmap_size(), 28 * 14, 'ofmap_size') self.assertEqual(clayer.ofmap_size(2), 28 * 14 * 2, 'ofmap_size') self.assertEqual(clayer.total_ofmap_size(), 28 * 14 * 64, 'total_ofmap_size') self.assertEqual(clayer.total_ofmap_size(2), 28 * 14 * 64 * 2, 'total_ofmap_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])