summaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
authorAndrew Waterman <aswaterman@gmail.com>2017-01-05 15:14:28 -0500
committerGitHub <noreply@github.com>2017-01-05 15:14:28 -0500
commitd69f4cb8653f4974374f98debf9ce2cc820a2b57 (patch)
treecc6889cdc8877bcf4b1a8e8760c773e9ec0ef76f /software
parente641c398daa91d896ce37fbb73015c054a4e0b21 (diff)
parentb8057b191231dea4b973f1d5066f59afa3881dba (diff)
Merge pull request #38 from sifive/benchmarking
Benchmarking
Diffstat (limited to 'software')
-rw-r--r--software/coremark/.gitignore9
-rw-r--r--software/coremark/Makefile20
-rw-r--r--software/coremark/core_portme.c52
-rw-r--r--software/coremark/core_portme.h58
-rw-r--r--software/dhrystone/Makefile2
-rw-r--r--software/dhrystone/dhry_stubs.c7
6 files changed, 142 insertions, 6 deletions
diff --git a/software/coremark/.gitignore b/software/coremark/.gitignore
new file mode 100644
index 0000000..6bd8438
--- /dev/null
+++ b/software/coremark/.gitignore
@@ -0,0 +1,9 @@
+/*.o
+/coremark
+/core_list_join.c
+/core_main.c
+/coremark.h
+/core_matrix.c
+/core_state.c
+/core_util.c
+/trans.c
diff --git a/software/coremark/Makefile b/software/coremark/Makefile
new file mode 100644
index 0000000..b57151e
--- /dev/null
+++ b/software/coremark/Makefile
@@ -0,0 +1,20 @@
+TARGET := coremark
+
+C_SRCS := \
+ core_list_join.c \
+ core_main.c \
+ core_matrix.c \
+ core_state.c \
+ core_util.c \
+ core_portme.c \
+
+HEADERS := \
+ coremark.h \
+ core_portme.h \
+
+CFLAGS := -O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4
+CFLAGS += -DFLAGS_STR=\""$(CFLAGS)"\"
+CFLAGS += -DITERATIONS=10000 -DPERFORMANCE_RUN=1
+
+BSP_BASE = ../../bsp
+include $(BSP_BASE)/env/common.mk
diff --git a/software/coremark/core_portme.c b/software/coremark/core_portme.c
new file mode 100644
index 0000000..cbf1396
--- /dev/null
+++ b/software/coremark/core_portme.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "coremark.h"
+#include "platform.h"
+#include "encoding.h"
+
+#if VALIDATION_RUN
+ volatile ee_s32 seed1_volatile=0x3415;
+ volatile ee_s32 seed2_volatile=0x3415;
+ volatile ee_s32 seed3_volatile=0x66;
+#endif
+
+#if PERFORMANCE_RUN
+ volatile ee_s32 seed1_volatile=0x0;
+ volatile ee_s32 seed2_volatile=0x0;
+ volatile ee_s32 seed3_volatile=0x66;
+#endif
+
+#if PROFILE_RUN
+ volatile ee_s32 seed1_volatile=0x8;
+ volatile ee_s32 seed2_volatile=0x8;
+ volatile ee_s32 seed3_volatile=0x8;
+#endif
+
+volatile ee_s32 seed4_volatile=ITERATIONS;
+volatile ee_s32 seed5_volatile=0;
+
+static CORE_TICKS t0, t1;
+
+void start_time(void)
+{
+ t0 = get_timer_value();
+}
+
+void stop_time(void)
+{
+ t1 = get_timer_value();
+}
+
+CORE_TICKS get_time(void)
+{
+ return t1 - t0;
+}
+
+secs_ret time_in_secs(CORE_TICKS ticks)
+{
+ // scale timer down to avoid uint64_t -> double conversion in RV32
+ int scale = 256;
+ uint32_t delta = ticks / scale;
+ uint32_t freq = get_timer_freq() / scale;
+ return delta / (double)freq;
+}
diff --git a/software/coremark/core_portme.h b/software/coremark/core_portme.h
new file mode 100644
index 0000000..82298d6
--- /dev/null
+++ b/software/coremark/core_portme.h
@@ -0,0 +1,58 @@
+#ifndef FESDK_CORE_PORTME_H
+#define FESDK_CORE_PORTME_H
+
+#include <stdint.h>
+#include <stddef.h>
+
+#define HAS_FLOAT 1
+#define HAS_TIME_H 1
+#define USE_CLOCK 1
+#define HAS_STDIO 1
+#define HAS_PRINTF 1
+#define SEED_METHOD SEED_VOLATILE
+#define CORE_TICKS uint64_t
+#define ee_u8 uint8_t
+#define ee_u16 uint16_t
+#define ee_u32 uint32_t
+#define ee_s16 int16_t
+#define ee_s32 int32_t
+#define ee_ptr_int uintptr_t
+#define ee_size_t size_t
+#define COMPILER_FLAGS FLAGS_STR
+
+#define align_mem(x) (void *)(((ee_ptr_int)(x) + sizeof(ee_u32) - 1) & -sizeof(ee_u32))
+
+#ifdef __GNUC__
+# define COMPILER_VERSION "GCC"__VERSION__
+#else
+# error
+#endif
+
+#define MEM_METHOD MEM_STACK
+#define MEM_LOCATION "STACK"
+
+#define MAIN_HAS_NOARGC 0
+#define MAIN_HAS_NORETURN 0
+
+#define MULTITHREAD 1
+#define USE_PTHREAD 0
+#define USE_FORK 0
+#define USE_SOCKET 0
+
+#define default_num_contexts MULTITHREAD
+
+typedef int core_portable;
+static void portable_init(core_portable *p, int *argc, char *argv[]) {}
+static void portable_fini(core_portable *p) {}
+
+#if !defined(PROFILE_RUN) && !defined(PERFORMANCE_RUN) && !defined(VALIDATION_RUN)
+#if (TOTAL_DATA_SIZE==1200)
+#define PROFILE_RUN 1
+#elif (TOTAL_DATA_SIZE==2000)
+#define PERFORMANCE_RUN 1
+#else
+#define VALIDATION_RUN 1
+#endif
+#endif
+
+#endif
diff --git a/software/dhrystone/Makefile b/software/dhrystone/Makefile
index a55b1ec..78a7b23 100644
--- a/software/dhrystone/Makefile
+++ b/software/dhrystone/Makefile
@@ -5,7 +5,7 @@ C_SRCS := dhry_stubs.c dhry_printf.c
HEADERS := dhry.h
DHRY_SRCS := dhry_1.c dhry_2.c
-DHRY_CFLAGS := -O2 -DTIME -fno-inline -fno-builtin-printf -Wno-implicit
+DHRY_CFLAGS := -O2 -DTIME -fno-inline -fno-builtin-printf -Wno-implicit -march=rv32ima
XLEN ?= 32
CFLAGS := -Os -fno-common
diff --git a/software/dhrystone/dhry_stubs.c b/software/dhrystone/dhry_stubs.c
index d3bd14c..0616f86 100644
--- a/software/dhrystone/dhry_stubs.c
+++ b/software/dhrystone/dhry_stubs.c
@@ -3,16 +3,13 @@
/* The functions in this file are only meant to support Dhrystone on an
* embedded RV32 system and are obviously incorrect in general. */
-// return the cycle counter as though it were the current time
long time(void)
{
- long t;
- asm volatile ("csrr %0, mcycle" : "=r" (t));
- return t / (get_cpu_freq() / 1000);
+ return get_timer_value() / get_timer_freq();
}
// set the number of dhrystone iterations
void __wrap_scanf(const char* fmt, int* n)
{
- *n = 1500000;
+ *n = 100000000;
}