Changeset 0a16d5f in rtems


Ignore:
Timestamp:
Mar 28, 2017, 12:38:07 PM (2 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
3785f937
Parents:
8783660
git-author:
Sebastian Huber <sebastian.huber@…> (03/28/17 12:38:07)
git-committer:
Sebastian Huber <sebastian.huber@…> (03/29/17 05:42:46)
Message:

benchmarks/linpack: Port to RTEMS

Close #2958.

Location:
testsuites/benchmarks/linpack
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • testsuites/benchmarks/linpack/Makefile.am

    r8783660 r0a16d5f  
    11rtems_tests_PROGRAMS = linpack
    2 linpack_SOURCES = init.c
     2linpack_SOURCES = init.c linpack-pc.c
     3linpack_LDADD = -lm
    34
    45dist_rtems_tests_DATA = linpack.scn linpack.doc
     
    910
    1011AM_CPPFLAGS += -I$(top_srcdir)/../support/include
     12AM_CFLAGS += -fno-inline -fno-builtin
    1113
    12 LINK_OBJS = $(linpack_OBJECTS)
     14LINK_OBJS = $(linpack_OBJECTS) $(linpack_LDADD)
    1315LINK_LIBS = $(linpack_LDLIBS)
    1416
  • testsuites/benchmarks/linpack/init.c

    r8783660 r0a16d5f  
    2121const char rtems_test_name[] = "LINPACK";
    2222
    23 static void test(void)
    24 {
    25 }
     23int main(int argc, char **argv);
    2624
    2725static void Init(rtems_task_argument arg)
    2826{
     27  char *argv[] = {
     28    "linpack",
     29    "10",
     30    NULL
     31  };
     32
    2933  TEST_BEGIN();
    3034
    31   test();
     35  main(2, argv);
    3236
    3337  TEST_END();
     
    4246#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
    4347
     48#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
     49
    4450#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
    4551
  • testsuites/benchmarks/linpack/linpack-pc.c

    r8783660 r0a16d5f  
    194194*/
    195195
     196#define DP
     197#define ROLL
    196198
    197199#ifdef SP
     
    217219
    218220
    219 #define NTIMES 10
     221#define NTIMES atoi(argv[1])
    220222
    221223#include <stdio.h>
    222224#include <math.h>
    223 #include <conio.h>
    224225#include <stdlib.h>
    225226
    226227
    227228static REAL atime[9][15];
    228 static char this_month;
    229 static int this_year;
    230229
    231230void print_time (int row);
     
    241240
    242241/* TIME TIME TIME TIME TIME TIME TIME TIME TIME TIME TIME TIME TIME */
    243    #include <time.h>  /* for following time functions only */
    244    REAL second()
     242   #include <sys/time.h>  /* for following time functions only */
     243   static REAL second(void)
    245244     {       
    246         REAL secs;
    247         clock_t Time;
    248         Time = clock();
    249         secs = (REAL)Time / (REAL)CLOCKS_PER_SEC;
    250         return secs ;
     245        struct timeval tv;
     246
     247        gettimeofday(&tv, NULL);
     248        return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6;
    251249     }
    252250
    253 /* DATE DATE DATE DATE DATE DATE DATE DATE DATE DATE DATE DATE DATE */
    254    #include <dos.h>   /* for following date functions only */
    255    void what_date()
    256      {
    257          /*   Watcom   */         
    258          struct dosdate_t adate;
    259          _dos_getdate( &adate );
    260          this_month = adate.month;
    261          this_year = adate.year;
    262          
    263          /*   Borland
    264          struct date adate;
    265          getdate( &adate );
    266          this_month = adate.da_mon;
    267          this_year = adate.da_year;
    268          */         
    269          return;
    270      }
    271 
    272 
    273 main ()
     251int main (int argc, char **argv)
    274252{
    275253        static REAL aa[200*200],a[200*201],b[200],x[200];       
     
    278256        REAL mflops;
    279257        static int ipvt[200],n,i,j,ntimes,info,lda,ldaa;
    280         int Endit, pass, loop;
     258        int pass, loop;
    281259        REAL overhead1, overhead2, time1, time2;
    282         FILE    *outfile;
    283         char *compiler, *options, general[9][80] = {" "};
    284          
    285         outfile = fopen("Linpack.txt","a+");
    286         if (outfile == NULL)
    287         {
    288             printf ("Cannot open results file \n\n");
    289             printf("Press any key\n");
    290             Endit = getch();
    291             exit (0);
    292         }
     260        char *compiler, *options;
    293261
    294262/************************************************************************
     
    351319               (double)x1, (double)x2);
    352320
    353         fprintf(stderr,"Times are reported for matrices of order        %5d\n",n);
    354         fprintf(stderr,"1 pass times for array with leading dimension of%5d\n\n",lda);
    355         fprintf(stderr,"      dgefa      dgesl      total     Mflops       unit");
    356         fprintf(stderr,"      ratio\n");
     321        fprintf(stdout,"Times are reported for matrices of order        %5d\n",n);
     322        fprintf(stdout,"1 pass times for array with leading dimension of%5d\n\n",lda);
     323        fprintf(stdout,"      dgefa      dgesl      total     Mflops       unit");
     324        fprintf(stdout,"      ratio\n");
    357325
    358326        atime[2][0] = total;
     
    375343 ************************************************************************/
    376344       
    377         fprintf (stderr,"\nCalculating matgen overhead\n");
     345        fprintf (stdout,"\nCalculating matgen overhead\n");
    378346        pass = -20;
    379347        loop = NTIMES;
     
    388356            time2 = second();
    389357            overhead1 = (time2 - time1);
    390             fprintf (stderr,"%10d times %6.2f seconds\n", loop, overhead1);
     358            fprintf (stdout,"%10d times %6.2f seconds\n", loop, overhead1);
    391359            if (overhead1 > 5.0)
    392360            {
     
    409377        overhead1 = overhead1 / (double)loop;
    410378
    411         fprintf (stderr,"Overhead for 1 matgen %12.5f seconds\n\n", overhead1);
     379        fprintf (stdout,"Overhead for 1 matgen %12.5f seconds\n\n", overhead1);
    412380
    413381/************************************************************************
     
    415383 ************************************************************************/
    416384       
    417         fprintf (stderr,"Calculating matgen/dgefa passes for 5 seconds\n");
     385        fprintf (stdout,"Calculating matgen/dgefa passes for 5 seconds\n");
    418386        pass = -20;
    419387        ntimes = NTIMES;
     
    428396            }
    429397            time2 = second() - time1;
    430             fprintf (stderr,"%10d times %6.2f seconds\n", ntimes, time2);
     398            fprintf (stdout,"%10d times %6.2f seconds\n", ntimes, time2);
    431399            if (time2 > 5.0)
    432400            {
     
    450418        if (ntimes == 0) ntimes = 1;
    451419
    452         fprintf (stderr,"Passes used %10d \n\n", ntimes);
    453         fprintf(stderr,"Times for array with leading dimension of%4d\n\n",lda);
    454         fprintf(stderr,"      dgefa      dgesl      total     Mflops       unit");
    455         fprintf(stderr,"      ratio\n");       
     420        fprintf (stdout,"Passes used %10d \n\n", ntimes);
     421        fprintf(stdout,"Times for array with leading dimension of%4d\n\n",lda);
     422        fprintf(stdout,"      dgefa      dgesl      total     Mflops       unit");
     423        fprintf(stdout,"      ratio\n");       
    456424
    457425/************************************************************************
     
    493461        }
    494462        atime[3][6] = atime[3][6] / 5.0;
    495         fprintf (stderr,"Average                          %11.2f\n",
     463        fprintf (stdout,"Average                          %11.2f\n",
    496464                                               (double)atime[3][6]);       
    497465       
    498         fprintf (stderr,"\nCalculating matgen2 overhead\n");
     466        fprintf (stdout,"\nCalculating matgen2 overhead\n");
    499467
    500468/************************************************************************
     
    511479        overhead2 = overhead2 / (double)loop;
    512480       
    513         fprintf (stderr,"Overhead for 1 matgen %12.5f seconds\n\n", overhead2);
    514         fprintf(stderr,"Times for array with leading dimension of%4d\n\n",ldaa);
    515         fprintf(stderr,"      dgefa      dgesl      total     Mflops       unit");
    516         fprintf(stderr,"      ratio\n");
     481        fprintf (stdout,"Overhead for 1 matgen %12.5f seconds\n\n", overhead2);
     482        fprintf(stdout,"Times for array with leading dimension of%4d\n\n",ldaa);
     483        fprintf(stdout,"      dgefa      dgesl      total     Mflops       unit");
     484        fprintf(stdout,"      ratio\n");
    517485
    518486/************************************************************************
     
    554522        }
    555523        atime[3][12] = atime[3][12] / 5.0;
    556         fprintf (stderr,"Average                          %11.2f\n",
     524        fprintf (stdout,"Average                          %11.2f\n",
    557525                                              (double)atime[3][12]); 
    558526
     
    564532        if (atime[3][12] < mflops) mflops = atime[3][12];
    565533       
    566         fprintf(stderr,"\n");
    567         fprintf(stderr,ROLLING);fprintf(stderr,PREC);
    568         fprintf(stderr," Precision %11.2f Mflops \n\n",mflops);
    569 
    570         what_date();
    571 
    572 /************************************************************************
    573  *             Type details of hardware, software etc.                  *
    574  ************************************************************************/
    575 
    576     printf ("Enter the following data which will be "
    577                                 "appended to file Linpack.txt \n\n");
    578     printf ("PC Supplier/model ?\n                    ");
    579     scanf ("%[^\n]", general[1]);
    580     fflush (stdin);
    581     printf ("CPU               ?\n                    ");
    582     scanf ("%[^\n]", general[2]);
    583     fflush (stdin);
    584     printf ("Clock MHz         ?\n                    ");
    585     scanf ("%[^\n]", general[3]);
    586     fflush (stdin);
    587     printf ("Cache             ?\n                    ");
    588     scanf ("%[^\n]", general[4]);
    589     fflush (stdin);
    590     printf ("Chipset/options   ?\n                    ");
    591     scanf ("%[^\n]", general[5]);
    592     fflush (stdin);
    593     printf ("OS/DOS version    ?\n                    ");
    594     scanf ("%[^\n]", general[6]);
    595     fflush (stdin);
    596     printf ("Your name         ?\n                    ");
    597     scanf ("%[^\n]", general[7]);
    598     fflush (stdin);
    599     printf ("Where from        ?\n                    ");
    600     scanf ("%[^\n]", general[8]);
    601     fflush (stdin);
    602     printf ("Mail address      ?\n                    ");
    603     scanf ("%[^\n]", general[0]);
    604     fflush (stdin);
    605 
    606 /************************************************************************
    607  *              Add results to output file LLloops.txt                  *
    608  ************************************************************************/
    609            
    610     fprintf (outfile, "----------------- ----------------- --------- "
    611                       "--------- ---------\n");
    612     fprintf (outfile, "LINPACK BENCHMARK FOR PCs 'C/C++'    n @ 100\n\n");
    613     fprintf (outfile, "Month run         %d/%d\n", this_month, this_year);
    614     fprintf (outfile, "PC model          %s\n", general[1]);
    615     fprintf (outfile, "CPU               %s\n", general[2]);
    616     fprintf (outfile, "Clock MHz         %s\n", general[3]);
    617     fprintf (outfile, "Cache             %s\n", general[4]);
    618     fprintf (outfile, "Options           %s\n", general[5]);
    619     fprintf (outfile, "OS/DOS            %s\n", general[6]);
    620     fprintf (outfile, "Compiler          %s\n", compiler);
    621     fprintf (outfile, "OptLevel          %s\n", options);
    622     fprintf (outfile, "Run by            %s\n", general[7]);
    623     fprintf (outfile, "From              %s\n", general[8]);
    624     fprintf (outfile, "Mail              %s\n\n", general[0]);
    625    
    626     fprintf(outfile, "Rolling            %s\n",ROLLING);
    627     fprintf(outfile, "Precision          %s\n",PREC);
    628     fprintf(outfile, "norm. resid        %16.1f\n",(double)residn);
    629     fprintf(outfile, "resid              %16.8e\n",(double)resid);
    630     fprintf(outfile, "machep             %16.8e\n",(double)epsn);
    631     fprintf(outfile, "x[0]-1             %16.8e\n",(double)x1);
    632     fprintf(outfile, "x[n-1]-1           %16.8e\n",(double)x2);
    633     fprintf(outfile, "matgen 1 seconds   %16.5f\n",overhead1);
    634     fprintf(outfile, "matgen 2 seconds   %16.5f\n",overhead2);
    635     fprintf(outfile, "Repetitions        %16d\n",ntimes);
    636     fprintf(outfile, "Leading dimension  %16d\n",lda); 
    637     fprintf(outfile, "                              dgefa     dgesl "
    638                      "    total    Mflops\n");
    639     fprintf(outfile, "1 pass seconds     %16.5f %9.5f %9.5f\n",
    640                       atime[0][0], atime[1][0], atime[2][0]);
    641                      
    642     for (i=1 ; i<6 ; i++)
    643     {                 
    644         fprintf(outfile, "Repeat seconds     %16.5f %9.5f %9.5f %9.2f\n",               
    645                        atime[0][i], atime[1][i], atime[2][i], atime[3][i]);
    646     }
    647     fprintf(outfile, "Average            %46.2f\n",atime[3][6]);
    648    
    649     fprintf(outfile, "Leading dimension  %16d\n",ldaa);
    650      
    651     for (i=7 ; i<12 ; i++)
    652     {                 
    653         fprintf(outfile, "Repeat seconds     %16.5f %9.5f %9.5f %9.2f\n",               
    654                        atime[0][i], atime[1][i], atime[2][i], atime[3][i]);
    655     }
    656     fprintf(outfile, "Average            %46.2f\n\n",atime[3][12]);
    657    
    658     fclose (outfile);
    659    
    660     printf("\nPress any key\n");
    661     Endit = getch();
     534        fprintf(stdout,"\n");
     535        fprintf(stdout,ROLLING);fprintf(stdout,PREC);
     536        fprintf(stdout," Precision %11.2f Mflops \n\n",mflops);
    662537}
    663538     
     
    666541
    667542{
    668 fprintf(stderr,"%11.5f%11.5f%11.5f%11.2f%11.4f%11.4f\n",   (double)atime[0][row],
     543fprintf(stdout,"%11.5f%11.5f%11.5f%11.2f%11.4f%11.4f\n",   (double)atime[0][row],
    669544       (double)atime[1][row], (double)atime[2][row], (double)atime[3][row],
    670545       (double)atime[4][row], (double)atime[5][row]);
     
    951826
    952827{
    953         int i,ix,iy,m,mp1;
    954 
    955         mp1 = 0;
    956         m = 0;
     828        int i,ix,iy;
    957829
    958830        if(n <= 0) return;
     
    1020892{
    1021893        REAL dtemp;
    1022         int i,ix,iy,m,mp1;
    1023 
    1024         mp1 = 0;
    1025         m = 0;
     894        int i,ix,iy;
    1026895
    1027896        dtemp = ZERO;
     
    1087956
    1088957{
    1089         int i,m,mp1,nincx;
    1090 
    1091         mp1 = 0;
    1092         m = 0;
     958        int i,nincx;
    1093959
    1094960        if(n <= 0)return;
     
    11511017        if( n < 1 ) return(-1);
    11521018        if(n ==1 ) return(0);
     1019        itemp = -1;
    11531020        if(incx != 1) {
    11541021
  • testsuites/benchmarks/linpack/linpack.scn

    r8783660 r0a16d5f  
     1*** BEGIN OF TEST LINPACK ***
     2Rolled Double Precision Linpack Benchmark - PC Version in 'C/C++'
     3
     4Compiler     INSERT COMPILER NAME HERE
     5Optimisation INSERT OPTIMISATION OPTIONS HERE
     6
     7norm resid      resid           machep         x[0]-1          x[n-1]-1
     8   1.7    7.41628980e-14   2.22044605e-16  -1.49880108e-14  -1.89848137e-14
     9
     10Times are reported for matrices of order          100
     111 pass times for array with leading dimension of  201
     12
     13      dgefa      dgesl      total     Mflops       unit      ratio
     14    0.93482    0.02799    0.96281       0.71     2.8043    17.1930
     15
     16Calculating matgen overhead
     17        10 times   0.78 seconds
     18        20 times   1.56 seconds
     19        40 times   3.13 seconds
     20        80 times   6.26 seconds
     21Overhead for 1 matgen      0.07824 seconds
     22
     23Calculating matgen/dgefa passes for 5 seconds
     24        10 times  10.13 seconds
     25Passes used          4
     26
     27Times for array with leading dimension of 201
     28
     29      dgefa      dgesl      total     Mflops       unit      ratio
     30    0.93483    0.02794    0.96278       0.71     2.8042    17.1924
     31    0.93483    0.02791    0.96274       0.71     2.8041    17.1918
     32    0.93483    0.02791    0.96274       0.71     2.8041    17.1919
     33    0.93483    0.02791    0.96274       0.71     2.8041    17.1918
     34    0.93483    0.02791    0.96274       0.71     2.8041    17.1918
     35Average                                 0.71
     36
     37Calculating matgen2 overhead
     38Overhead for 1 matgen      0.07824 seconds
     39
     40Times for array with leading dimension of 200
     41
     42      dgefa      dgesl      total     Mflops       unit      ratio
     43    0.93487    0.02791    0.96278       0.71     2.8042    17.1924
     44    0.93483    0.02791    0.96274       0.71     2.8041    17.1918
     45    0.93484    0.02791    0.96275       0.71     2.8041    17.1919
     46    0.93487    0.02791    0.96278       0.71     2.8042    17.1924
     47    0.93484    0.02791    0.96275       0.71     2.8041    17.1919
     48Average                                 0.71
     49
     50Rolled Double  Precision        0.71 Mflops
     51
     52*** END OF TEST LINPACK ***
Note: See TracChangeset for help on using the changeset viewer.