benchmarks/whetstone: Port to RTEMS

Update #2958.
This commit is contained in:
Sebastian Huber
2017-03-28 14:04:44 +02:00
parent 3785f93779
commit a1c60b5690
5 changed files with 39 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
rtems_tests_PROGRAMS = whetstone rtems_tests_PROGRAMS = whetstone
whetstone_SOURCES = init.c whetstone_SOURCES = init.c whetstone.c
whetstone_LDADD = -lm
dist_rtems_tests_DATA = whetstone.scn whetstone.doc dist_rtems_tests_DATA = whetstone.scn whetstone.doc
@@ -8,8 +9,9 @@ include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am include $(top_srcdir)/../automake/leaf.am
AM_CPPFLAGS += -I$(top_srcdir)/../support/include AM_CPPFLAGS += -I$(top_srcdir)/../support/include
AM_CFLAGS += -fno-inline -fno-builtin
LINK_OBJS = $(whetstone_OBJECTS) LINK_OBJS = $(whetstone_OBJECTS) $(whetstone_LDADD)
LINK_LIBS = $(whetstone_LDLIBS) LINK_LIBS = $(whetstone_LDLIBS)
whetstone$(EXEEXT): $(whetstone_OBJECTS) $(whetstone_DEPENDENCIES) whetstone$(EXEEXT): $(whetstone_OBJECTS) $(whetstone_DEPENDENCIES)

View File

@@ -20,15 +20,19 @@
const char rtems_test_name[] = "WHETSTONE"; const char rtems_test_name[] = "WHETSTONE";
static void test(void) int main(int argc, char **argv);
{
}
static void Init(rtems_task_argument arg) static void Init(rtems_task_argument arg)
{ {
char *argv[] = {
"whetstone",
"10000",
NULL
};
TEST_BEGIN(); TEST_BEGIN();
test(); main(2, argv);
TEST_END(); TEST_END();
rtems_test_exit(0); rtems_test_exit(0);
@@ -41,6 +45,8 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT #define CONFIGURE_INIT

View File

@@ -58,7 +58,7 @@ C**********************************************************************
#include <math.h> #include <math.h>
/* the following is optional depending on the timing function used */ /* the following is optional depending on the timing function used */
#include <time.h> #include <sys/time.h>
/* map the FORTRAN math functions, etc. to the C versions */ /* map the FORTRAN math functions, etc. to the C versions */
#define DSIN sin #define DSIN sin
@@ -82,6 +82,15 @@ void P3(double X, double Y, double *Z);
double T,T1,T2,E1[5]; double T,T1,T2,E1[5];
int J,K,L; int J,K,L;
static double
Time(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6;
}
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
@@ -94,8 +103,8 @@ main(int argc, char *argv[])
/* added for this version */ /* added for this version */
long loopstart; long loopstart;
long startsec, finisec; double startsec, finisec;
float KIPS; double KIPS;
int continuous; int continuous;
loopstart = 1000; /* see the note about LOOP below */ loopstart = 1000; /* see the note about LOOP below */
@@ -120,7 +129,7 @@ C
C Start benchmark timing at this point. C Start benchmark timing at this point.
C C
*/ */
startsec = time(0); startsec = Time();
/* /*
C C
@@ -355,7 +364,7 @@ C
C Stop benchmark timing at this point. C Stop benchmark timing at this point.
C C
*/ */
finisec = time(0); finisec = Time();
/* /*
C---------------------------------------------------------------- C----------------------------------------------------------------
@@ -372,10 +381,10 @@ C--------------------------------------------------------------------
return(1); return(1);
} }
printf("Loops: %ld, Iterations: %d, Duration: %ld sec.\n", printf("Loops: %ld, Iterations: %d, Duration: %f sec.\n",
LOOP, II, finisec-startsec); LOOP, II, finisec-startsec);
KIPS = (100.0*LOOP*II)/(float)(finisec-startsec); KIPS = (100.0*LOOP*II)/(finisec-startsec);
if (KIPS >= 1000.0) if (KIPS >= 1000.0)
printf("C Converted Double Precision Whetstones: %.1f MIPS\n", KIPS/1000.0); printf("C Converted Double Precision Whetstones: %.1f MIPS\n", KIPS/1000.0);
else else

View File

@@ -4,8 +4,10 @@ test set name: whetstone
directives: directives:
TBD None, this benchmark program depends on the compiler, standard libraries, the
processor and the memory system. It is more or less independent of the
operating system, except some disturbance from the system clock service.
concepts: concepts:
TBD This is the whetstone benchmark ported to RTEMS.

View File

@@ -0,0 +1,5 @@
*** BEGIN OF TEST WHETSTONE ***
Loops: 10000, Iterations: 1, Duration: 347.679499 sec.
C Converted Double Precision Whetstones: 2.9 MIPS
*** END OF TEST WHETSTONE ***