From c2d60d1688475bdf5a7d304572ab9d881bee6a32 Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Thu, 30 Apr 2020 14:50:13 +0100 Subject: [PATCH] [Test] Add throughput and execution test to streaming fifo unit test --- tests/fpgadataflow/test_fpgadataflow_fifo.py | 44 +++++++++++++------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/tests/fpgadataflow/test_fpgadataflow_fifo.py b/tests/fpgadataflow/test_fpgadataflow_fifo.py index ab628bd77..8ab480992 100644 --- a/tests/fpgadataflow/test_fpgadataflow_fifo.py +++ b/tests/fpgadataflow/test_fpgadataflow_fifo.py @@ -10,14 +10,15 @@ from finn.transformation.fpgadataflow.codegen_ipstitch import CodeGen_ipstitch from finn.transformation.fpgadataflow.hlssynth_ipgen import HLSSynth_IPGen -# from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode +from finn.transformation.fpgadataflow.set_exec_mode import SetExecMode from finn.transformation.general import GiveUniqueNodeNames -# from finn.util.basic import gen_finn_dt_tensor +from finn.util.basic import gen_finn_dt_tensor -# import finn.core.onnx_exec as oxe +import finn.core.onnx_exec as oxe from finn.transformation.fpgadataflow.insert_tlastmarker import InsertTLastMarker from finn.transformation.fpgadataflow.make_deployment import DeployToPYNQ +from finn.transformation.fpgadataflow.prepare_rtlsim import PrepareRTLSim from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver from finn.transformation.fpgadataflow.make_pynq_proj import MakePYNQProject from finn.transformation.fpgadataflow.replace_verilog_relpaths import ( @@ -25,6 +26,7 @@ from finn.transformation.fpgadataflow.replace_verilog_relpaths import ( ) from finn.transformation.fpgadataflow.synth_pynq_proj import SynthPYNQProject from finn.util.basic import pynq_part_map +from finn.core.throughput_test import throughput_test build_dir = "/tmp/" + os.environ["FINN_INST_NAME"] @@ -71,22 +73,30 @@ def prepare_inputs(input_tensor, dt): # inWidth @pytest.mark.parametrize("folded_shape", [[1, 1, 128]]) # outWidth -@pytest.mark.parametrize("depth", [256]) +@pytest.mark.parametrize("depth", [16]) # finn_dtype @pytest.mark.parametrize("finn_dtype", [DataType.BIPOLAR]) # , DataType.INT2]) def test_fpgadataflow_fifo_rtlsim(Shape, folded_shape, depth, finn_dtype): # generate input data - # x = gen_finn_dt_tensor(finn_dtype, Shape) - # input_dict = prepare_inputs(x, finn_dtype) + x = gen_finn_dt_tensor(finn_dtype, Shape) + input_dict = prepare_inputs(x, finn_dtype) model = make_single_fifo_modelwrapper(Shape, depth, folded_shape, finn_dtype) - # model = model.transform(SetExecMode("rtlsim")) + model = model.transform(SetExecMode("rtlsim")) model = model.transform(InsertTLastMarker()) model = model.transform(GiveUniqueNodeNames()) model = model.transform(CodeGen_ipgen(test_fpga_part, target_clk_ns)) model = model.transform(HLSSynth_IPGen()) + model = model.transform(PrepareRTLSim()) + y = oxe.execute_onnx(model, input_dict)["outp"] + assert ( + y == x + ).all(), """The output values are not the same as the + input values anymore.""" + assert y.shape == tuple(Shape), """The output shape is incorrect.""" + model = model.transform(ReplaceVerilogRelPaths()) model = model.transform(CodeGen_ipstitch(test_fpga_part)) model = model.transform(MakePYNQProject(test_pynq_board)) @@ -99,10 +109,16 @@ def test_fpgadataflow_fifo_rtlsim(Shape, folded_shape, depth, finn_dtype): target_dir = os.getenv("PYNQ_TARGET_DIR", "/home/xilinx/finn") model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir)) - # y = oxe.execute_onnx(model, input_dict)["outp"] - - # assert ( - # y == x - # ).all(), """The output values are not the same as the - # input values anymore.""" - # assert y.shape == tuple(Shape), """The output shape is incorrect.""" + res = throughput_test(model) + expected_dict = {} + expected_dict["runtime[ms]"] = [] + expected_dict["throughput[images/s]"] = [] + expected_dict["DRAM_in_bandwidth[Mb/s]"] = [] + expected_dict["DRAM_out_bandwidth[Mb/s]"] = [] + for key in expected_dict: + assert ( + key in res + ), """Throughput test not successful, no value for {} + in result dictionary""".format( + key + ) -- GitLab