forked from Github_Repos/cvw
Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
commit
c93b6abed2
@ -211,26 +211,53 @@ MAIN_RETURN_TYPE main(int argc, char *argv[]) {
|
||||
core_init_state(results[0].size,results[i].seed1,results[i].memblock[3]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*int foreverLoop = 1;
|
||||
secs_ret timing = 0;
|
||||
int timingInt;
|
||||
ee_printf("\nENTERING FOREVER WHILE LOOP\n");
|
||||
while(foreverLoop == 1)
|
||||
{
|
||||
start_time();
|
||||
//filler
|
||||
stop_time();
|
||||
timing += time_in_secs(get_time());
|
||||
timingInt = (int)timing;
|
||||
ee_printf("Timing is %d\n", timingInt);
|
||||
}/*
|
||||
|
||||
/* automatically determine number of iterations if not set */
|
||||
if (results[0].iterations==0) {
|
||||
secs_ret secs_passed=0;
|
||||
ee_u32 divisor;
|
||||
results[0].iterations=1;
|
||||
int iterationInc = 0;
|
||||
ee_printf("\n\nENTERING ITERATION WHILE LOOP\n");
|
||||
while (secs_passed < (secs_ret)1) {
|
||||
results[0].iterations*=10;
|
||||
if(iterationInc != 0)
|
||||
{
|
||||
results[0].iterations++;
|
||||
}
|
||||
ee_printf("iterations is %d\n", results[0].iterations);
|
||||
start_time();
|
||||
iterate(&results[0]);
|
||||
stop_time();
|
||||
secs_passed=time_in_secs(get_time());
|
||||
secs_passed = time_in_secs(get_time());
|
||||
int secs_passed_int = (int)secs_passed;
|
||||
ee_printf("secs passed is %d\n", secs_passed_int);
|
||||
iterationInc++;
|
||||
}
|
||||
ee_printf("LEAVING ITERATION WHILE LOOP!\n\n");
|
||||
/* now we know it executes for at least 1 sec, set actual run time at about 10 secs */
|
||||
divisor=(ee_u32)secs_passed;
|
||||
ee_printf("divisor is %lu\n", divisor);
|
||||
if (divisor==0) /* some machines cast float to int as 0 since this conversion is not defined by ANSI, but we know at least one second passed */
|
||||
divisor=1;
|
||||
results[0].iterations*=1+10/divisor;
|
||||
ee_printf("iterations is %d\n", results[0].iterations);
|
||||
}
|
||||
/* perform actual benchmark */
|
||||
ee_printf("Starting benchmark\n");
|
||||
start_time();
|
||||
#if (MULTITHREAD>1)
|
||||
if (default_num_contexts>MULTITHREAD) {
|
||||
@ -249,7 +276,8 @@ MAIN_RETURN_TYPE main(int argc, char *argv[]) {
|
||||
#endif
|
||||
stop_time();
|
||||
total_time=get_time();
|
||||
ee_printf("ending benchmark");
|
||||
ee_printf("total time is %u\n", total_time);
|
||||
ee_printf("ending benchmark\n");
|
||||
/* get a function of the input to report */
|
||||
seedcrc=crc16(results[0].seed1,seedcrc);
|
||||
seedcrc=crc16(results[0].seed2,seedcrc);
|
||||
@ -340,12 +368,17 @@ MAIN_RETURN_TYPE main(int argc, char *argv[]) {
|
||||
for (i=0 ; i<default_num_contexts; i++)
|
||||
ee_printf("[%d]crcstate : 0x%04x\n",i,results[i].crcstate);
|
||||
for (i=0 ; i<default_num_contexts; i++)
|
||||
ee_printf("[%d]crcfinal : 0x%04x\"n",i,results[i].crc);
|
||||
ee_printf("[%d]crcfinal : 0x%04x\n",i,results[i].crc);
|
||||
if (total_errors==0) {
|
||||
ee_printf("Correct operation validated. See README.md for run and reporting rules.\n");
|
||||
#if HAS_FLOAT
|
||||
if (known_id==3) {
|
||||
ee_printf("CoreMark 1.0 : %f / %s %s",default_num_contexts*results[0].iterations/time_in_secs(total_time),COMPILER_VERSION,COMPILER_FLAGS);
|
||||
unsigned long long tmp = (unsigned long long) 1000.0*default_num_contexts*results[0].iterations/time_in_secs(total_time);
|
||||
secs_ret totalmsecs = time_in_secs(total_time);
|
||||
int totalmint = (int) totalmsecs;
|
||||
ee_printf("ELAPSED S: %d\n", totalmint);
|
||||
|
||||
ee_printf("CoreMark 1.0 : %d / %s %s\n",tmp,COMPILER_VERSION,COMPILER_FLAGS);
|
||||
#if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC)
|
||||
ee_printf(" / %s",MEM_LOCATION);
|
||||
#else
|
||||
|
@ -114,9 +114,10 @@ void portable_free(void *p) {
|
||||
#define read_csr(reg) ({ unsigned long __tmp; \
|
||||
asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \
|
||||
__tmp; })
|
||||
#define GETMYTIME(_t) (*_t=read_csr(cycle))
|
||||
#define GETMYTIME(_t) (_t = *(volatile unsigned long long*)0x0200BFF8)
|
||||
#define MYTIMEDIFF(fin,ini) ((fin)-(ini))
|
||||
#define TIMER_RES_DIVIDER 1
|
||||
// Changing TIMER_RES_DIVIDER to 1000000 sets EE_TICKS_PER_SEC to 1000 (now counting ticks per ms)
|
||||
#define TIMER_RES_DIVIDER 10000
|
||||
#define SAMPLE_TIME_IMPLEMENTATION 1
|
||||
#endif
|
||||
#define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)
|
||||
@ -132,7 +133,9 @@ static CORETIMETYPE start_time_val, stop_time_val;
|
||||
or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0.
|
||||
*/
|
||||
void start_time(void) {
|
||||
GETMYTIME(&start_time_val );
|
||||
GETMYTIME(start_time_val);
|
||||
ee_printf("Timer started\n");
|
||||
ee_printf(" MTIME: %u\n", start_time_val);
|
||||
#if CALLGRIND_RUN
|
||||
CALLGRIND_START_INSTRUMENTATION
|
||||
#endif
|
||||
@ -153,7 +156,9 @@ void stop_time(void) {
|
||||
#if MICA
|
||||
asm volatile("int3");/*1 */
|
||||
#endif
|
||||
GETMYTIME(&stop_time_val );
|
||||
GETMYTIME(stop_time_val);
|
||||
ee_printf("Timer stopped\n");
|
||||
ee_printf(" MTIME: %u\n", stop_time_val);
|
||||
}
|
||||
/* Function: get_time
|
||||
Return an abstract "ticks" number that signifies time on the system.
|
||||
@ -166,6 +171,7 @@ void stop_time(void) {
|
||||
*/
|
||||
CORE_TICKS get_time(void) {
|
||||
CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
|
||||
ee_printf(" Elapsed MTIME: %u\n", elapsed);
|
||||
return elapsed;
|
||||
}
|
||||
/* Function: time_in_secs
|
||||
@ -176,13 +182,15 @@ CORE_TICKS get_time(void) {
|
||||
*/
|
||||
secs_ret time_in_secs(CORE_TICKS ticks) {
|
||||
secs_ret retval=((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC;
|
||||
int retvalint = (int)retval;
|
||||
ee_printf(" RETURN VALUE FROM TIME IN SECS FUNCTION: %d\n", retvalint);
|
||||
return retval;
|
||||
}
|
||||
#else
|
||||
#error "Please implement timing functionality in core_portme.c"
|
||||
#endif /* SAMPLE_TIME_IMPLEMENTATION */
|
||||
|
||||
ee_u32 default_num_contexts=MULTITHREAD;
|
||||
ee_u32 default_num_contexts = MULTITHREAD;
|
||||
|
||||
/* Function: portable_init
|
||||
Target specific initialization code
|
||||
|
Loading…
Reference in New Issue
Block a user