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
whetstone_SOURCES = init.c
whetstone_SOURCES = init.c whetstone.c
whetstone_LDADD = -lm
dist_rtems_tests_DATA = whetstone.scn whetstone.doc
@@ -8,8 +9,9 @@ include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
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)
whetstone$(EXEEXT): $(whetstone_OBJECTS) $(whetstone_DEPENDENCIES)

View File

@@ -20,15 +20,19 @@
const char rtems_test_name[] = "WHETSTONE";
static void test(void)
{
}
int main(int argc, char **argv);
static void Init(rtems_task_argument arg)
{
char *argv[] = {
"whetstone",
"10000",
NULL
};
TEST_BEGIN();
test();
main(2, argv);
TEST_END();
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_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT

View File

@@ -58,7 +58,7 @@ C**********************************************************************
#include <math.h>
/* 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 */
#define DSIN sin
@@ -82,6 +82,15 @@ void P3(double X, double Y, double *Z);
double T,T1,T2,E1[5];
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
main(int argc, char *argv[])
{
@@ -94,8 +103,8 @@ main(int argc, char *argv[])
/* added for this version */
long loopstart;
long startsec, finisec;
float KIPS;
double startsec, finisec;
double KIPS;
int continuous;
loopstart = 1000; /* see the note about LOOP below */
@@ -120,7 +129,7 @@ C
C Start benchmark timing at this point.
C
*/
startsec = time(0);
startsec = Time();
/*
C
@@ -355,7 +364,7 @@ C
C Stop benchmark timing at this point.
C
*/
finisec = time(0);
finisec = Time();
/*
C----------------------------------------------------------------
@@ -372,10 +381,10 @@ C--------------------------------------------------------------------
return(1);
}
printf("Loops: %ld, Iterations: %d, Duration: %ld sec.\n",
printf("Loops: %ld, Iterations: %d, Duration: %f sec.\n",
LOOP, II, finisec-startsec);
KIPS = (100.0*LOOP*II)/(float)(finisec-startsec);
KIPS = (100.0*LOOP*II)/(finisec-startsec);
if (KIPS >= 1000.0)
printf("C Converted Double Precision Whetstones: %.1f MIPS\n", KIPS/1000.0);
else

View File

@@ -4,8 +4,10 @@ test set name: whetstone
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:
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 ***