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