[sw] Reduce the number of runs in memory_perftest

Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/lib/base/memory_perftest.c b/sw/device/lib/base/memory_perftest.c
index 65ea1cb..2004393 100644
--- a/sw/device/lib/base/memory_perftest.c
+++ b/sw/device/lib/base/memory_perftest.c
@@ -13,7 +13,10 @@
 #include "sw/device/lib/testing/test_framework/check.h"
 #include "sw/device/lib/testing/test_framework/ottf_main.h"
 
-#define PERFTEST_BUF_LEN 1000
+enum {
+  kBufLen = 1000,
+  kNumRuns = 10,
+};
 
 typedef struct perf_test {
   // A human-readable name for this particular test, e.g. "memcpy".
@@ -27,7 +30,7 @@
   // A function that exercises the function under test, e.g. memcpy. This
   // function pointer must not be NULL. The runtime of this function will be
   // measured.
-  void (*func)(uint8_t *buf1, uint8_t *buf2, size_t len);
+  void (*func)(uint8_t *buf1, uint8_t *buf2, size_t num_runs);
 
   // The expected number of CPU cycles that `func` will take to run.
   size_t expected_num_cycles;
@@ -35,19 +38,18 @@
 
 // Run the given `perf_test_t` and return the number of cycles it took.
 static inline uint64_t perf_test_run(const perf_test_t *test, uint8_t *buf1,
-                                     uint8_t *buf2, size_t len) {
+                                     uint8_t *buf2, size_t num_runs) {
   CHECK(test->setup_buf1 != NULL);
   CHECK(test->setup_buf2 != NULL);
   CHECK(test->func != NULL);
 
   uint64_t total_clock_cycles = 0;
-  for (size_t i = 0; i <= len; ++i) {
-    // Set up each buffer from [0..i].
-    test->setup_buf1(buf1, i);
-    test->setup_buf2(buf2, i);
+  for (size_t i = 0; i < num_runs; ++i) {
+    test->setup_buf1(buf1, kBufLen);
+    test->setup_buf2(buf2, kBufLen);
 
     uint64_t start_cycles = ibex_mcycle_read();
-    test->func(buf1, buf2, i);
+    test->func(buf1, buf2, kBufLen);
     uint64_t end_cycles = ibex_mcycle_read();
 
     // Even if the 64-bit cycle counter overflowed while running the test, the
@@ -141,68 +143,87 @@
 // If you observe the cycle count is smaller the hardcoded expectation, that's
 // probably a good thing; please update the expectation!
 static const perf_test_t kPerfTests[] = {
-    {.label = "memcpy",
-     .setup_buf1 = &fill_buf_deterministic_values,
-     .setup_buf2 = &fill_buf_deterministic_values,
-     .func = &test_memcpy,
-     .expected_num_cycles = 10538542},
-    {.label = "memcpy_zeroes",
-     .setup_buf1 = &fill_buf_deterministic_values,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memcpy,
-     .expected_num_cycles = 10538542},
-    {.label = "memset",
-     .setup_buf1 = &fill_buf_zeroes,
-     .setup_buf2 = &fill_buf_deterministic_values,
-     .func = &test_memset,
-     .expected_num_cycles = 6537542},
-    {.label = "memset_zeroes",
-     .setup_buf1 = &fill_buf_zeroes,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memset,
-     .expected_num_cycles = 6537542},
-    {.label = "memcmp_pathological",
-     .setup_buf1 = &fill_buf_zeroes_then_one,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memcmp,
-     .expected_num_cycles = 10541545},
-    {.label = "memcmp_zeroes",
-     .setup_buf1 = &fill_buf_zeroes,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memcmp,
-     .expected_num_cycles = 10538545},
-    {.label = "memrcmp_pathological",
-     .setup_buf1 = &fill_buf_zeroes,
-     .setup_buf2 = &fill_buf_one_then_zeroes,
-     .func = &test_memrcmp,
-     .expected_num_cycles = 10043043},
-    {.label = "memrcmp_zeroes",
-     .setup_buf1 = &fill_buf_zeroes,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memrcmp,
-     .expected_num_cycles = 10040043},
-    {.label = "memchr_pathological",
-     .setup_buf1 = &fill_buf_deterministic_values,
-     .setup_buf2 = &fill_buf_zeroes,
-     .func = &test_memchr,
-     .expected_num_cycles = 2399078},
-    {.label = "memrchr_pathological",
-     .setup_buf1 = &fill_buf_deterministic_values,
-     .setup_buf2 = &fill_buf_deterministic_values,
-     .func = &test_memrchr,
-     .expected_num_cycles = 2158742},
+    {
+        .label = "memcpy",
+        .setup_buf1 = &fill_buf_deterministic_values,
+        .setup_buf2 = &fill_buf_deterministic_values,
+        .func = &test_memcpy,
+        .expected_num_cycles = 190290,
+    },
+    {
+        .label = "memcpy_zeroes",
+        .setup_buf1 = &fill_buf_deterministic_values,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memcpy,
+        .expected_num_cycles = 190290,
+    },
+    {
+        .label = "memset",
+        .setup_buf1 = &fill_buf_zeroes,
+        .setup_buf2 = &fill_buf_deterministic_values,
+        .func = &test_memset,
+        .expected_num_cycles = 140310,
+    },
+    {
+        .label = "memset_zeroes",
+        .setup_buf1 = &fill_buf_zeroes,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memset,
+        .expected_num_cycles = 140310,
+    },
+    {
+        .label = "memcmp_pathological",
+        .setup_buf1 = &fill_buf_zeroes_then_one,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memcmp,
+        .expected_num_cycles = 190340,
+    },
+    {
+        .label = "memcmp_zeroes",
+        .setup_buf1 = &fill_buf_zeroes,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memcmp,
+        .expected_num_cycles = 190320,
+    },
+    {
+        .label = "memrcmp_pathological",
+        .setup_buf1 = &fill_buf_zeroes,
+        .setup_buf2 = &fill_buf_one_then_zeroes,
+        .func = &test_memrcmp,
+        .expected_num_cycles = 220320,
+    },
+    {
+        .label = "memrcmp_zeroes",
+        .setup_buf1 = &fill_buf_zeroes,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memrcmp,
+        .expected_num_cycles = 220280,
+    },
+    {
+        .label = "memchr_pathological",
+        .setup_buf1 = &fill_buf_deterministic_values,
+        .setup_buf2 = &fill_buf_zeroes,
+        .func = &test_memchr,
+        .expected_num_cycles = 11940,
+    },
+    {
+        .label = "memrchr_pathological",
+        .setup_buf1 = &fill_buf_deterministic_values,
+        .setup_buf2 = &fill_buf_deterministic_values,
+        .func = &test_memrchr,
+        .expected_num_cycles = 44940,
+    },
 };
 
-static uint8_t buf1[PERFTEST_BUF_LEN];
-static uint8_t buf2[PERFTEST_BUF_LEN];
+static uint8_t buf1[kBufLen];
+static uint8_t buf2[kBufLen];
 
 bool test_main(void) {
   bool all_expectations_match = true;
   for (size_t i = 0; i < ARRAYSIZE(kPerfTests); ++i) {
     const perf_test_t *test = &kPerfTests[i];
 
-    const uint64_t num_cycles =
-        perf_test_run(test, buf1, buf2, PERFTEST_BUF_LEN);
+    const uint64_t num_cycles = perf_test_run(test, buf1, buf2, kNumRuns);
     if (num_cycles != test->expected_num_cycles) {
       all_expectations_match = false;
       // Cast cycle counts to `uint32_t` before printing because `base_printf()`