From 05e58d78398588e5df06a06bd02a5f939e1114d6 Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Thu, 2 Apr 2020 14:49:15 +0100 Subject: [PATCH] [Test] Add convert to hls, dataflow partition and folding --- tests/end2end/test_end2end_cnv_w1a1.py | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/end2end/test_end2end_cnv_w1a1.py b/tests/end2end/test_end2end_cnv_w1a1.py index 6ee7e4e77..5ee03dc75 100644 --- a/tests/end2end/test_end2end_cnv_w1a1.py +++ b/tests/end2end/test_end2end_cnv_w1a1.py @@ -41,6 +41,7 @@ import onnx # NOQA # import onnx.numpy_helper as nph from finn.core.modelwrapper import ModelWrapper +from finn.custom_op.registry import getCustomOp from finn.transformation.double_to_single_float import DoubleToSingleFloat from finn.transformation.infer_shapes import InferShapes from finn.transformation.move_reshape import MoveReshape @@ -52,6 +53,11 @@ from finn.transformation.bipolar_to_xnor import ConvertBipolarMatMulToXnorPopcou import finn.transformation.streamline.absorb as absorb from finn.transformation.streamline.reorder import MakeMaxPoolNHWC import finn.transformation.fpgadataflow.convert_to_hls_layers as to_hls +from finn.transformation.fpgadataflow.create_dataflow_partition import ( + CreateDataflowPartition, +) +from finn.transformation.fpgadataflow.insert_dwc import InsertDWC +from finn.transformation.fpgadataflow.insert_tlastmarker import InsertTLastMarker from finn.util.basic import pynq_part_map from finn.util.test import get_test_model_trained @@ -102,3 +108,36 @@ def test_end2end_cnv_w1a1_convert_to_hls_layers(): model = model.transform(to_hls.InferStreamingMaxPool()) model = model.transform(MoveReshape()) model.save(build_dir + "/end2end_cnv_w1a1_hls_layers.onnx") + + +def test_end2end_cnv_w1a1_create_dataflow_partition(): + model = ModelWrapper(build_dir + "/end2end_cnv_w1a1_hls_layers.onnx") + parent_model = model.transform(CreateDataflowPartition()) + parent_model.save(build_dir + "/end2end_cnv_w1a1_dataflow_parent.onnx") + sdp_node = getCustomOp(parent_model.graph.node[2]) + dataflow_model_filename = sdp_node.get_nodeattr("model") + dataflow_model = ModelWrapper(dataflow_model_filename) + dataflow_model.save(build_dir + "/end2end_cnv_w1a1_dataflow_model.onnx") + + +def test_end2end_cnv_w1a1_fold_and_tlastmarker(): + model = ModelWrapper(build_dir + "/end2end_cnv_w1a1_dataflow_model.onnx") + for node in model.graph.node: + if node.op_type == "StreamingFCLayer_Batch": + inst = getCustomOp(node) + inst.set_nodeattr("mem_mode", "decoupled") + mw = inst.get_nodeattr("MW") + mh = inst.get_nodeattr("MH") + if mh % 4 == 0: + pe = mh // 4 + else: + pe = mh + inst.set_nodeattr("PE", pe) + if mw % 16 == 0: + simd = mw // 16 + else: + simd = mw + inst.set_nodeattr("SIMD", simd) + model = model.transform(InsertDWC()) + model = model.transform(InsertTLastMarker()) + model.save(build_dir + "/end2end_cnv_w1a1_folded.onnx") -- GitLab