From 33bd895a456cecba4b996d86870fc3158531999f Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu <maltanar@gmail.com> Date: Tue, 26 May 2020 15:21:38 +0100 Subject: [PATCH] [Test] use powers of two for perf tests, stop when max reached --- tests/pynq/test_pynq_performance_end2end.py | 16 ++++++++++++---- tests/pynq/test_pynq_performance_fifo.py | 15 +++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/tests/pynq/test_pynq_performance_end2end.py b/tests/pynq/test_pynq_performance_end2end.py index c7be7ae33..66a93a190 100644 --- a/tests/pynq/test_pynq_performance_end2end.py +++ b/tests/pynq/test_pynq_performance_end2end.py @@ -11,6 +11,7 @@ build_dir = "/tmp/" + os.environ["FINN_INST_NAME"] @pytest.mark.parametrize("end2end_example", ["tfc_w1a1", "cnv_w1a1"]) +@pytest.mark.slow def test_pynq_performance_end2end(end2end_example): model = load_test_checkpoint_or_skip( build_dir + "/end2end_%s_pynq_deploy.onnx" % end2end_example @@ -21,11 +22,18 @@ def test_pynq_performance_end2end(end2end_example): if ip == "" or board == "": pytest.skip("PYNQ board or IP address not specified") ret = dict() - bsize_range = [1, 10, 100, 1000, 10000] - for bsize in bsize_range: + # try a range of batch sizes, some may fail due to insufficient DMA + # buffers + bsize_range_in = [2 ** i for i in range(16)] + bsize_range = [] + for bsize in bsize_range_in: res = throughput_test(model, bsize) - assert res is not None - ret[bsize] = res + if res is not None: + ret[bsize] = res + bsize_range.append(bsize) + else: + # assume we reached largest possible N + break y = [ret[key]["runtime[ms]"] for key in bsize_range] lrret = linregress(bsize_range, y) diff --git a/tests/pynq/test_pynq_performance_fifo.py b/tests/pynq/test_pynq_performance_fifo.py index 7aaff9f6e..5152c6cdc 100644 --- a/tests/pynq/test_pynq_performance_fifo.py +++ b/tests/pynq/test_pynq_performance_fifo.py @@ -84,11 +84,18 @@ def test_pynq_performance_fifo(): model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir)) ret = dict() - bsize_range = [1, 10, 100, 1000, 10000, 100000] - for bsize in bsize_range: + # try a range of batch sizes, some may fail due to insufficient DMA + # buffers + bsize_range_in = [2 ** i for i in range(16)] + bsize_range = [] + for bsize in bsize_range_in: res = throughput_test(model, bsize) - assert res is not None - ret[bsize] = res + if res is not None: + ret[bsize] = res + bsize_range.append(bsize) + else: + # assume we reached largest possible N + break y = [ret[key]["runtime[ms]"] for key in bsize_range] lrret = linregress(bsize_range, y) -- GitLab