OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [sw/] [example/] [coremark/] [core_main.c] - Diff between revs 22 and 38

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 22 Rev 38
Line 15... Line 15...
 
 
Original Author: Shay Gal-on
Original Author: Shay Gal-on
*/
*/
 
 
/* File: core_main.c
/* File: core_main.c
        This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
        This file contains the framework to acquire a block of memory, seed
 
   initial parameters, tun t he benchmark and report the results.
*/
*/
#include "coremark.h"
#include "coremark.h"
 
 
/* Function: iterate
/* Function: iterate
        Run the benchmark for a specified number of iterations.
        Run the benchmark for a specified number of iterations.
Line 30... Line 31...
                b - Execute the algorithm N times.
                b - Execute the algorithm N times.
 
 
        Returns:
        Returns:
        NULL.
        NULL.
*/
*/
static ee_u16 list_known_crc[]   =      {(ee_u16)0xd4b0,(ee_u16)0x3340,(ee_u16)0x6a79,(ee_u16)0xe714,(ee_u16)0xe3c1};
static ee_u16 list_known_crc[]   = { (ee_u16)0xd4b0,
static ee_u16 matrix_known_crc[] =      {(ee_u16)0xbe52,(ee_u16)0x1199,(ee_u16)0x5608,(ee_u16)0x1fd7,(ee_u16)0x0747};
                                   (ee_u16)0x3340,
static ee_u16 state_known_crc[]  =      {(ee_u16)0x5e47,(ee_u16)0x39bf,(ee_u16)0xe5a4,(ee_u16)0x8e3a,(ee_u16)0x8d84};
                                   (ee_u16)0x6a79,
void *iterate(void *pres) {
                                   (ee_u16)0xe714,
 
                                   (ee_u16)0xe3c1 };
 
static ee_u16 matrix_known_crc[] = { (ee_u16)0xbe52,
 
                                     (ee_u16)0x1199,
 
                                     (ee_u16)0x5608,
 
                                     (ee_u16)0x1fd7,
 
                                     (ee_u16)0x0747 };
 
static ee_u16 state_known_crc[]  = { (ee_u16)0x5e47,
 
                                    (ee_u16)0x39bf,
 
                                    (ee_u16)0xe5a4,
 
                                    (ee_u16)0x8e3a,
 
                                    (ee_u16)0x8d84 };
 
void *
 
iterate(void *pres)
 
{
        ee_u32 i;
        ee_u32 i;
        ee_u16 crc;
        ee_u16 crc;
        core_results *res=(core_results *)pres;
        core_results *res=(core_results *)pres;
        ee_u32 iterations=res->iterations;
        ee_u32 iterations=res->iterations;
        res->crc=0;
        res->crc=0;
        res->crclist=0;
        res->crclist=0;
        res->crcmatrix=0;
        res->crcmatrix=0;
        res->crcstate=0;
        res->crcstate=0;
 
 
        for (i=0; i<iterations; i++) {
    for (i = 0; i < iterations; i++)
 
    {
                crc=core_bench_list(res,1);
                crc=core_bench_list(res,1);
                res->crc=crcu16(crc,res->crc);
                res->crc=crcu16(crc,res->crc);
                crc=core_bench_list(res,-1);
        crc      = core_bench_list(res, -1);
                res->crc=crcu16(crc,res->crc);
                res->crc=crcu16(crc,res->crc);
                if (i==0) res->crclist=res->crc;
        if (i == 0)
 
            res->crclist = res->crc;
        }
        }
        return NULL;
        return NULL;
}
}
 
 
#if (SEED_METHOD==SEED_ARG)
#if (SEED_METHOD==SEED_ARG)
Line 70... Line 87...
char *mem_name[3] = {"Static","Heap","Stack"};
char *mem_name[3] = {"Static","Heap","Stack"};
/* Function: main
/* Function: main
        Main entry routine for the benchmark.
        Main entry routine for the benchmark.
        This function is responsible for the following steps:
        This function is responsible for the following steps:
 
 
        1 - Initialize input seeds from a source that cannot be determined at compile time.
        1 - Initialize input seeds from a source that cannot be determined at
        2 - Initialize memory block for use.
   compile time. 2 - Initialize memory block for use. 3 - Run and time the
        3 - Run and time the benchmark.
   benchmark. 4 - Report results, testing the validity of the output if the
        4 - Report results, testing the validity of the output if the seeds are known.
   seeds are known.
 
 
        Arguments:
        Arguments:
        1 - first seed  : Any value
        1 - first seed  : Any value
        2 - second seed : Must be identical to first for iterations to be identical
        2 - second seed : Must be identical to first for iterations to be
        3 - third seed  : Any value, should be at least an order of magnitude less then the input size, but bigger then 32.
   identical 3 - third seed  : Any value, should be at least an order of
        4 - Iterations  : Special, if set to 0, iterations will be automatically determined such that the benchmark will run between 10 to 100 secs
   magnitude less then the input size, but bigger then 32. 4 - Iterations  :
 
   Special, if set to 0, iterations will be automatically determined such that
 
   the benchmark will run between 10 to 100 secs
 
 
*/
*/
 
 
#if MAIN_HAS_NOARGC
#if MAIN_HAS_NOARGC
MAIN_RETURN_TYPE main(void) {
MAIN_RETURN_TYPE
 
main(void)
 
{
        int argc=0;
        int argc=0;
        char *argv[1];
        char *argv[1];
#else
#else
MAIN_RETURN_TYPE main(int argc, char *argv[]) {
MAIN_RETURN_TYPE
 
main(int argc, char *argv[])
 
{
#endif
#endif
 
 
// -----------------------------------------------
 
// -----------------------------------------------
 
// Disable coremark compilation by default
 
#ifndef RUN_COREMARK
 
  #warning COREMARK HAS NOT BEEN COMPILED! Use >>make USER_FLAGS+=-DRUN_COREMARK clean_all exe<< to compile it.
 
 
 
  // inform the user if you are actually executing this
 
        portable_init(NULL, &argc, argv);
 
  ee_printf("ERROR! CoreMark has not been compiled. Use >>make USER_FLAGS+=-DRUN_COREMARK clean_all exe<< to compile it.\n");
 
 
 
  return 0;
 
#endif
 
// -----------------------------------------------
 
// -----------------------------------------------
 
 
 
 
 
        ee_u16 i,j=0,num_algorithms=0;
        ee_u16 i,j=0,num_algorithms=0;
        ee_s16 known_id=-1,total_errors=0;
    ee_s16       known_id = -1, total_errors = 0;
        ee_u16 seedcrc=0;
        ee_u16 seedcrc=0;
        CORE_TICKS total_time;
        CORE_TICKS total_time;
        core_results results[MULTITHREAD];
        core_results results[MULTITHREAD];
#if (MEM_METHOD==MEM_STACK)
#if (MEM_METHOD==MEM_STACK)
        ee_u8 stack_memblock[TOTAL_DATA_SIZE*MULTITHREAD];
        ee_u8 stack_memblock[TOTAL_DATA_SIZE*MULTITHREAD];
#endif
#endif
        /* first call any initializations needed */
        /* first call any initializations needed */
        portable_init(&(results[0].port), &argc, argv);
        portable_init(&(results[0].port), &argc, argv);
        /* First some checks to make sure benchmark will run ok */
        /* First some checks to make sure benchmark will run ok */
        if (sizeof(struct list_head_s)>128) {
    if (sizeof(struct list_head_s) > 128)
 
    {
                ee_printf("list_head structure too big for comparable data!\n");
                ee_printf("list_head structure too big for comparable data!\n");
                return MAIN_RETURN_VAL;
                return MAIN_RETURN_VAL;
        }
        }
        results[0].seed1=get_seed(1);
        results[0].seed1=get_seed(1);
        results[0].seed2=get_seed(2);
        results[0].seed2=get_seed(2);
Line 130... Line 137...
        results[0].iterations=get_seed_32(4);
        results[0].iterations=get_seed_32(4);
#if CORE_DEBUG
#if CORE_DEBUG
        results[0].iterations=1;
        results[0].iterations=1;
#endif
#endif
        results[0].execs=get_seed_32(5);
        results[0].execs=get_seed_32(5);
        if (results[0].execs==0) { /* if not supplied, execute all algorithms */
    if (results[0].execs == 0)
 
    { /* if not supplied, execute all algorithms */
                results[0].execs=ALL_ALGORITHMS_MASK;
                results[0].execs=ALL_ALGORITHMS_MASK;
        }
        }
                /* put in some default values based on one seed only for easy testing */
                /* put in some default values based on one seed only for easy testing */
        if ((results[0].seed1==0) && (results[0].seed2==0) && (results[0].seed3==0)) { /* validation run */
    if ((results[0].seed1 == 0) && (results[0].seed2 == 0)
 
        && (results[0].seed3 == 0))
 
    { /* perfromance run */
                results[0].seed1=0;
                results[0].seed1=0;
                results[0].seed2=0;
                results[0].seed2=0;
                results[0].seed3=0x66;
                results[0].seed3=0x66;
        }
        }
        if ((results[0].seed1==1) && (results[0].seed2==0) && (results[0].seed3==0)) { /* perfromance run */
    if ((results[0].seed1 == 1) && (results[0].seed2 == 0)
 
        && (results[0].seed3 == 0))
 
    { /* validation run */
                results[0].seed1=0x3415;
                results[0].seed1=0x3415;
                results[0].seed2=0x3415;
                results[0].seed2=0x3415;
                results[0].seed3=0x66;
                results[0].seed3=0x66;
        }
        }
#if (MEM_METHOD==MEM_STATIC)
#if (MEM_METHOD==MEM_STATIC)
Line 152... Line 164...
        results[0].err=0;
        results[0].err=0;
        #if (MULTITHREAD>1)
        #if (MULTITHREAD>1)
        #error "Cannot use a static data area with multiple contexts!"
        #error "Cannot use a static data area with multiple contexts!"
        #endif
        #endif
#elif (MEM_METHOD==MEM_MALLOC)
#elif (MEM_METHOD==MEM_MALLOC)
        for (i=0 ; i<MULTITHREAD; i++) {
    for (i = 0; i < MULTITHREAD; i++)
 
    {
                ee_s32 malloc_override=get_seed(7);
                ee_s32 malloc_override=get_seed(7);
                if (malloc_override != 0)
                if (malloc_override != 0)
                        results[i].size=malloc_override;
                        results[i].size=malloc_override;
                else
                else
                        results[i].size=TOTAL_DATA_SIZE;
                        results[i].size=TOTAL_DATA_SIZE;
Line 166... Line 179...
                results[i].seed3=results[0].seed3;
                results[i].seed3=results[0].seed3;
                results[i].err=0;
                results[i].err=0;
                results[i].execs=results[0].execs;
                results[i].execs=results[0].execs;
        }
        }
#elif (MEM_METHOD==MEM_STACK)
#elif (MEM_METHOD==MEM_STACK)
        for (i=0 ; i<MULTITHREAD; i++) {
for (i = 0; i < MULTITHREAD; i++)
 
{
                results[i].memblock[0]=stack_memblock+i*TOTAL_DATA_SIZE;
                results[i].memblock[0]=stack_memblock+i*TOTAL_DATA_SIZE;
                results[i].size=TOTAL_DATA_SIZE;
                results[i].size=TOTAL_DATA_SIZE;
                results[i].seed1=results[0].seed1;
                results[i].seed1=results[0].seed1;
                results[i].seed2=results[0].seed2;
                results[i].seed2=results[0].seed2;
                results[i].seed3=results[0].seed3;
                results[i].seed3=results[0].seed3;
Line 180... Line 194...
#else
#else
#error "Please define a way to initialize a memory block."
#error "Please define a way to initialize a memory block."
#endif
#endif
        /* Data init */
        /* Data init */
        /* Find out how space much we have based on number of algorithms */
        /* Find out how space much we have based on number of algorithms */
        for (i=0; i<NUM_ALGORITHMS; i++) {
    for (i = 0; i < NUM_ALGORITHMS; i++)
 
    {
                if ((1<<(ee_u32)i) & results[0].execs)
                if ((1<<(ee_u32)i) & results[0].execs)
                        num_algorithms++;
                        num_algorithms++;
        }
        }
        for (i=0 ; i<MULTITHREAD; i++)
        for (i=0 ; i<MULTITHREAD; i++)
                results[i].size=results[i].size/num_algorithms;
                results[i].size=results[i].size/num_algorithms;
        /* Assign pointers */
        /* Assign pointers */
        for (i=0; i<NUM_ALGORITHMS; i++) {
    for (i = 0; i < NUM_ALGORITHMS; i++)
 
    {
                ee_u32 ctx;
                ee_u32 ctx;
                if ((1<<(ee_u32)i) & results[0].execs) {
        if ((1 << (ee_u32)i) & results[0].execs)
 
        {
                        for (ctx=0 ; ctx<MULTITHREAD; ctx++)
                        for (ctx=0 ; ctx<MULTITHREAD; ctx++)
                                results[ctx].memblock[i+1]=(char *)(results[ctx].memblock[0])+results[0].size*j;
                results[ctx].memblock[i + 1]
 
                    = (char *)(results[ctx].memblock[0]) + results[0].size * j;
                        j++;
                        j++;
                }
                }
        }
        }
        /* call inits */
        /* call inits */
        for (i=0 ; i<MULTITHREAD; i++) {
    for (i = 0; i < MULTITHREAD; i++)
                if (results[i].execs & ID_LIST) {
    {
                        results[i].list=core_list_init(results[0].size,results[i].memblock[1],results[i].seed1);
        if (results[i].execs & ID_LIST)
                }
        {
                if (results[i].execs & ID_MATRIX) {
            results[i].list = core_list_init(
                        core_init_matrix(results[0].size, results[i].memblock[2], (ee_s32)results[i].seed1 | (((ee_s32)results[i].seed2) << 16), &(results[i].mat) );
                results[0].size, results[i].memblock[1], results[i].seed1);
                }
        }
                if (results[i].execs & ID_STATE) {
        if (results[i].execs & ID_MATRIX)
                        core_init_state(results[0].size,results[i].seed1,results[i].memblock[3]);
        {
 
            core_init_matrix(results[0].size,
 
                             results[i].memblock[2],
 
                             (ee_s32)results[i].seed1
 
                                 | (((ee_s32)results[i].seed2) << 16),
 
                             &(results[i].mat));
 
        }
 
        if (results[i].execs & ID_STATE)
 
        {
 
            core_init_state(
 
                results[0].size, results[i].seed1, results[i].memblock[3]);
                }
                }
        }
        }
 
 
        /* automatically determine number of iterations if not set */
        /* automatically determine number of iterations if not set */
        if (results[0].iterations==0) {
    if (results[0].iterations == 0)
 
    {
                secs_ret secs_passed=0;
                secs_ret secs_passed=0;
                ee_u32 divisor;
                ee_u32 divisor;
                results[0].iterations=1;
                results[0].iterations=1;
                while (secs_passed < (secs_ret)1) {
        while (secs_passed < (secs_ret)1)
 
        {
                        results[0].iterations*=10;
                        results[0].iterations*=10;
                        start_time();
                        start_time();
                        iterate(&results[0]);
                        iterate(&results[0]);
                        stop_time();
                        stop_time();
                        secs_passed=time_in_secs(get_time());
                        secs_passed=time_in_secs(get_time());
                }
                }
                /* now we know it executes for at least 1 sec, set actual run time at about 10 secs */
        /* now we know it executes for at least 1 sec, set actual run time at
 
         * about 10 secs */
                divisor=(ee_u32)secs_passed;
                divisor=(ee_u32)secs_passed;
                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 */
        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;
                        divisor=1;
                results[0].iterations*=1+10/divisor;
                results[0].iterations*=1+10/divisor;
        }
        }
        /* perform actual benchmark */
        /* perform actual benchmark */
        start_time();
        start_time();
#if (MULTITHREAD>1)
#if (MULTITHREAD>1)
        if (default_num_contexts>MULTITHREAD) {
    if (default_num_contexts > MULTITHREAD)
 
    {
                default_num_contexts=MULTITHREAD;
                default_num_contexts=MULTITHREAD;
        }
        }
        for (i=0 ; i<default_num_contexts; i++) {
    for (i = 0; i < default_num_contexts; i++)
 
    {
                results[i].iterations=results[0].iterations;
                results[i].iterations=results[0].iterations;
                results[i].execs=results[0].execs;
                results[i].execs=results[0].execs;
                core_start_parallel(&results[i]);
                core_start_parallel(&results[i]);
        }
        }
        for (i=0 ; i<default_num_contexts; i++) {
    for (i = 0; i < default_num_contexts; i++)
 
    {
                core_stop_parallel(&results[i]);
                core_stop_parallel(&results[i]);
        }
        }
#else
#else
        iterate(&results[0]);
        iterate(&results[0]);
#endif
#endif
Line 251... Line 287...
        seedcrc=crc16(results[0].seed1,seedcrc);
        seedcrc=crc16(results[0].seed1,seedcrc);
        seedcrc=crc16(results[0].seed2,seedcrc);
        seedcrc=crc16(results[0].seed2,seedcrc);
        seedcrc=crc16(results[0].seed3,seedcrc);
        seedcrc=crc16(results[0].seed3,seedcrc);
        seedcrc=crc16(results[0].size,seedcrc);
        seedcrc=crc16(results[0].size,seedcrc);
 
 
        switch (seedcrc) { /* test known output for common seeds */
    switch (seedcrc)
 
    {                /* test known output for common seeds */
                case 0x8a02: /* seed1=0, seed2=0, seed3=0x66, size 2000 per algorithm */
                case 0x8a02: /* seed1=0, seed2=0, seed3=0x66, size 2000 per algorithm */
                        known_id=0;
                        known_id=0;
                        ee_printf("6k performance run parameters for coremark.\n");
                        ee_printf("6k performance run parameters for coremark.\n");
                        break;
                        break;
                case 0x7b05: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 2000 per algorithm */
        case 0x7b05: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 2000 per
 
                        algorithm */
                        known_id=1;
                        known_id=1;
                        ee_printf("6k validation run parameters for coremark.\n");
                        ee_printf("6k validation run parameters for coremark.\n");
                        break;
                        break;
                case 0x4eaf: /* seed1=0x8, seed2=0x8, seed3=0x8, size 400 per algorithm */
        case 0x4eaf: /* seed1=0x8, seed2=0x8, seed3=0x8, size 400 per algorithm
 
                      */
                        known_id=2;
                        known_id=2;
                        ee_printf("Profile generation run parameters for coremark.\n");
                        ee_printf("Profile generation run parameters for coremark.\n");
                        break;
                        break;
                case 0xe9f5: /* seed1=0, seed2=0, seed3=0x66, size 666 per algorithm */
                case 0xe9f5: /* seed1=0, seed2=0, seed3=0x66, size 666 per algorithm */
                        known_id=3;
                        known_id=3;
                        ee_printf("2K performance run parameters for coremark.\n");
                        ee_printf("2K performance run parameters for coremark.\n");
                        break;
                        break;
                case 0x18f2: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 666 per algorithm */
        case 0x18f2: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 666 per
 
                        algorithm */
                        known_id=4;
                        known_id=4;
                        ee_printf("2K validation run parameters for coremark.\n");
                        ee_printf("2K validation run parameters for coremark.\n");
                        break;
                        break;
                default:
                default:
                        total_errors=-1;
            total_errors = -1;
                        break;
                        break;
        }
        }
        if (known_id>=0) {
    if (known_id >= 0)
                for (i=0 ; i<default_num_contexts; i++) {
    {
 
        for (i = 0; i < default_num_contexts; i++)
 
        {
                        results[i].err=0;
                        results[i].err=0;
                        if ((results[i].execs & ID_LIST) &&
            if ((results[i].execs & ID_LIST)
                                (results[i].crclist!=list_known_crc[known_id])) {
                && (results[i].crclist != list_known_crc[known_id]))
                                ee_printf("[%u]ERROR! list crc 0x%04x - should be 0x%04x\n",i,results[i].crclist,list_known_crc[known_id]);
            {
 
                ee_printf("[%u]ERROR! list crc 0x%04x - should be 0x%04x\n",
 
                          i,
 
                          results[i].crclist,
 
                          list_known_crc[known_id]);
                                results[i].err++;
                                results[i].err++;
                        }
                        }
                        if ((results[i].execs & ID_MATRIX) &&
            if ((results[i].execs & ID_MATRIX)
                                (results[i].crcmatrix!=matrix_known_crc[known_id])) {
                && (results[i].crcmatrix != matrix_known_crc[known_id]))
                                ee_printf("[%u]ERROR! matrix crc 0x%04x - should be 0x%04x\n",i,results[i].crcmatrix,matrix_known_crc[known_id]);
            {
 
                ee_printf("[%u]ERROR! matrix crc 0x%04x - should be 0x%04x\n",
 
                          i,
 
                          results[i].crcmatrix,
 
                          matrix_known_crc[known_id]);
                                results[i].err++;
                                results[i].err++;
                        }
                        }
                        if ((results[i].execs & ID_STATE) &&
            if ((results[i].execs & ID_STATE)
                                (results[i].crcstate!=state_known_crc[known_id])) {
                && (results[i].crcstate != state_known_crc[known_id]))
                                ee_printf("[%u]ERROR! state crc 0x%04x - should be 0x%04x\n",i,results[i].crcstate,state_known_crc[known_id]);
            {
 
                ee_printf("[%u]ERROR! state crc 0x%04x - should be 0x%04x\n",
 
                          i,
 
                          results[i].crcstate,
 
                          state_known_crc[known_id]);
                                results[i].err++;
                                results[i].err++;
                        }
                        }
                        total_errors+=results[i].err;
                        total_errors+=results[i].err;
                }
                }
        }
        }
        total_errors+=check_data_types();
        total_errors+=check_data_types();
        /* and report results */
        /* and report results */
        ee_printf("CoreMark Size    : %lu\n", (long unsigned) results[0].size);
        ee_printf("CoreMark Size    : %lu\n", (long unsigned) results[0].size);
        ee_printf("Total ticks      : see NEORV32 output below\n", (long unsigned) total_time); /* NEORV32 modified due to overflow in %lu in ee_printf */
    ee_printf("Total ticks      : %lu\n", (long unsigned)total_time);
#if HAS_FLOAT
#if HAS_FLOAT
        ee_printf("Total time (secs): %f\n",time_in_secs(total_time));
        ee_printf("Total time (secs): %f\n",time_in_secs(total_time));
        if (time_in_secs(total_time) > 0)
        if (time_in_secs(total_time) > 0)
                ee_printf("Iterations/Sec   : %f\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
        ee_printf("Iterations/Sec   : %f\n",
 
                  default_num_contexts * results[0].iterations
 
                      / time_in_secs(total_time));
#else 
#else 
        ee_printf("Total time (secs): %d\n",time_in_secs(total_time));
        ee_printf("Total time (secs): %d\n",time_in_secs(total_time));
        if (time_in_secs(total_time) > 0)
        if (time_in_secs(total_time) > 0)
                ee_printf("Iterations/Sec   : %d\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
        ee_printf("Iterations/Sec   : %d\n",
#endif
                  default_num_contexts * results[0].iterations
        if (time_in_secs(total_time) < 10) {
                      / time_in_secs(total_time));
                ee_printf("ERROR! Must execute for at least 10 secs for a valid result!\n");
#endif
 
    if (time_in_secs(total_time) < 10)
 
    {
 
        ee_printf(
 
            "ERROR! Must execute for at least 10 secs for a valid result!\n");
                total_errors++;
                total_errors++;
        }
        }
 
 
        ee_printf("Iterations       : %lu\n", (long unsigned) default_num_contexts*results[0].iterations);
    ee_printf("Iterations       : %lu\n",
 
              (long unsigned)default_num_contexts * results[0].iterations);
        ee_printf("Compiler version : %s\n",COMPILER_VERSION);
        ee_printf("Compiler version : %s\n",COMPILER_VERSION);
        ee_printf("Compiler flags   : %s\n",COMPILER_FLAGS);
        ee_printf("Compiler flags   : %s\n",COMPILER_FLAGS);
#if (MULTITHREAD>1)
#if (MULTITHREAD>1)
        ee_printf("Parallel %s : %d\n",PARALLEL_METHOD,default_num_contexts);
        ee_printf("Parallel %s : %d\n",PARALLEL_METHOD,default_num_contexts);
#endif
#endif
Line 335... Line 396...
        if (results[0].execs & ID_STATE)
        if (results[0].execs & ID_STATE)
                for (i=0 ; i<default_num_contexts; i++)
                for (i=0 ; i<default_num_contexts; i++)
                        ee_printf("[%d]crcstate      : 0x%04x\n",i,results[i].crcstate);
                        ee_printf("[%d]crcstate      : 0x%04x\n",i,results[i].crcstate);
        for (i=0 ; i<default_num_contexts; i++)
        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) {
    if (total_errors == 0)
                ee_printf("Correct operation validated. See README.md for run and reporting rules.\n");
    {
 
        ee_printf(
 
            "Correct operation validated. See README.md for run and reporting "
 
            "rules.\n");
#if HAS_FLOAT
#if HAS_FLOAT
                if (known_id==3) {
        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);
        {
 
            ee_printf("CoreMark 1.0 : %f / %s %s",
 
                      default_num_contexts * results[0].iterations
 
                          / time_in_secs(total_time),
 
                      COMPILER_VERSION,
 
                      COMPILER_FLAGS);
#if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC)
#if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC)
                        ee_printf(" / %s",MEM_LOCATION);
                        ee_printf(" / %s",MEM_LOCATION);
#else
#else
                        ee_printf(" / %s",mem_name[MEM_METHOD]);
                        ee_printf(" / %s",mem_name[MEM_METHOD]);
#endif
#endif
Line 356... Line 425...
#endif
#endif
        }
        }
        if (total_errors>0)
        if (total_errors>0)
                ee_printf("Errors detected\n");
                ee_printf("Errors detected\n");
        if (total_errors<0)
        if (total_errors<0)
                ee_printf("Cannot validate operation for these seed values, please compare with results on a known platform.\n");
        ee_printf(
 
            "Cannot validate operation for these seed values, please compare "
 
            "with results on a known platform.\n");
 
 
#if (MEM_METHOD==MEM_MALLOC)
#if (MEM_METHOD==MEM_MALLOC)
        for (i=0 ; i<MULTITHREAD; i++)
        for (i=0 ; i<MULTITHREAD; i++)
                portable_free(results[i].memblock[0]);
                portable_free(results[i].memblock[0]);
#endif
#endif
Line 368... Line 439...
        portable_fini(&(results[0].port));
        portable_fini(&(results[0].port));
 
 
        return MAIN_RETURN_VAL;
        return MAIN_RETURN_VAL;
}
}
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.