Ignore:
Timestamp:
Aug 13, 2014, 4:34:50 PM (8 years ago)
Author:
cfuguet
Message:

reconfiguration: tsar_generic_iob sc_start() calls optimization

  • sc_start() continue during 'simul_period' cycles
  • 'simul_period' is defined as the debug_period if debug activated or 'stats_period' otherwise
Location:
branches/reconfiguration/platforms/tsar_generic_iob
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/reconfiguration/platforms/tsar_generic_iob/arch.py

    r748 r766  
    2020#  - nb_procs       : number of processors per cluster
    2121#
    22 #  The "hidden" platform parameters are:
     22#  The "hidden" parameters (defined below) are:
    2323#  - nb_ttys        : number of TTY channels
    2424#  - nb_nics        : number of NIC channels
     
    4343    nb_ttys           = 1
    4444    nb_nics           = 2
    45     fbf_width         = 1024
     45    fbf_width         = 128
    4646    x_io              = 0
    4747    y_io              = 0
     
    5959
    6060    assert( (x_size == 1) or (x_size == 2) or (x_size == 4)
    61              or (y_size == 8) or (x_size == 16) )
     61             or (x_size == 8) or (x_size == 16) )
    6262
    6363    assert( (y_size == 1) or (y_size == 2) or (y_size == 4)
     
    111111    iob_size  = 0x1000                     # 4 kbytes
    112112
     113
    113114    ### GIET_VM specifics virtual segments
    114 
    115     ### define  bootloader vsegs base addresses
     115    ### define bootloader vsegs base addresses
    116116
    117117    boot_mapping_vbase   = 0x00000000      # ident
    118     boot_mapping_size    = 0x00040000      # 256 Kbytes
    119 
    120     boot_code_vbase      = 0x00040000      # ident
    121     boot_code_size       = 0x00020000      # 128 Kbytes
    122 
    123     boot_data_vbase      = 0x00060000      # ident
    124     boot_data_size       = 0x00010000      # 64 Kbytes
    125 
    126     boot_buffer_vbase    = 0x00070000      # ident
    127     boot_buffer_size     = 0x00060000      # 384 Kbytes
    128 
    129     boot_stack_vbase     = 0x03F00000      # ident
    130     boot_stack_size      = 0x00100000      # 1 Mbytes
    131 
    132     ### define kernel vsegs base addresses
     118    boot_mapping_size    = 0x00080000      # 512 Kbytes
     119
     120    boot_code_vbase      = 0x00080000      # ident
     121    boot_code_size       = 0x00040000      # 256 Kbytes
     122
     123    boot_data_vbase      = 0x000C0000      # ident
     124    boot_data_size       = 0x00080000      # 512 Kbytes
     125
     126    boot_stack_vbase     = 0x00140000      # ident
     127    boot_stack_size      = 0x00050000      # 320 Kbytes
     128
     129    ### define kernel vsegs base addresses and sizes
    133130
    134131    kernel_code_vbase    = 0x80000000
     
    136133
    137134    kernel_data_vbase    = 0x80020000
    138     kernel_data_size     = 0x00060000      # 384 Kbytes
    139 
    140     kernel_uncdata_vbase = 0x80080000
    141     kernel_uncdata_size  = 0x00040000      # 256 Kbytes
    142 
    143     kernel_init_vbase    = 0x800C0000
     135    kernel_data_size     = 0x00020000      # 128 Kbytes
     136
     137    kernel_uncdata_vbase = 0x80040000
     138    kernel_uncdata_size  = 0x00010000      # 64 Kbytes
     139
     140    kernel_init_vbase    = 0x80050000
    144141    kernel_init_size     = 0x00010000      # 64 Kbytes
    145142
    146143    kernel_sched_vbase   = 0xF0000000            # distributed in all clusters
    147     kernel_sched_size    = 0x1000 * nb_procs     # 4 kbytes per processor
     144    kernel_sched_size    = 0x2000 * nb_procs     # 8 kbytes per processor
    148145
    149146    ### create mapping
     
    226223    ### global vsegs for boot_loader / identity mapping
    227224
    228     mapping.addGlobal( 'seg_boot_mapping'  , boot_mapping_vbase  , boot_mapping_size  , 'C_W_',
    229                        vtype = 'BLOB'  , x = 0, y = 0, pseg = 'RAM', identity = True )
    230 
    231     mapping.addGlobal( 'seg_boot_code'     , boot_code_vbase     , boot_code_size     , 'CXW_',
    232                        vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
    233 
    234     mapping.addGlobal( 'seg_boot_data'     , boot_data_vbase     , boot_data_size     , 'C_W_',
    235                        vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
    236 
    237     mapping.addGlobal( 'seg_boot_buffer'   , boot_buffer_vbase   , boot_buffer_size   , 'C_W_',
    238                        vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
    239 
    240     mapping.addGlobal( 'seg_boot_stack'    , boot_stack_vbase    , boot_stack_size    , 'C_W_',
    241                        vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
    242 
    243     ### global vsegs for kernel
     225    mapping.addGlobal( 'seg_boot_mapping', boot_mapping_vbase, boot_mapping_size,
     226                       'C_W_', vtype = 'BLOB'  , x = 0, y = 0, pseg = 'RAM',
     227                       identity = True )
     228
     229    mapping.addGlobal( 'seg_boot_code', boot_code_vbase, boot_code_size,
     230                       'CXW_', vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM',
     231                       identity = True )
     232
     233    mapping.addGlobal( 'seg_boot_data', boot_data_vbase, boot_data_size,
     234                       'C_W_', vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM',
     235                       identity = True )
     236
     237    mapping.addGlobal( 'seg_boot_stack', boot_stack_vbase, boot_stack_size,
     238                       'C_W_', vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM',
     239                       identity = True )
     240
     241    ### the code global vsegs for kernel can be replicated in all clusters
     242    ### if the page tables are distributed in all clusters.
    244243
    245244    if distributed_ptabs:
     
    258257        mapping.addGlobal( 'seg_kernel_code', kernel_code_vbase, kernel_code_size,
    259258                           'CXW_', vtype = 'ELF', x = 0 , y = 0 , pseg = 'RAM',
    260                            binpath = 'build/kernel/kernel.elf' )
     259                           binpath = 'build/kernel/kernel.elf', local = False )
    261260
    262261        mapping.addGlobal( 'seg_kernel_init', kernel_init_vbase, kernel_init_size,
    263262                           'CXW_', vtype = 'ELF', x = 0 , y = 0 , pseg = 'RAM',
    264                            binpath = 'build/kernel/kernel.elf' )
    265 
    266     mapping.addGlobal( 'seg_kernel_data'   , kernel_data_vbase   , kernel_data_size   , 'C_W_',
    267                        vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
    268 
    269     mapping.addGlobal( 'seg_kernel_uncdata', kernel_uncdata_vbase, kernel_uncdata_size, '__W_',
    270                        vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
     263                           binpath = 'build/kernel/kernel.elf', local = False )
     264
     265    ### shared global vsegs for kernel
     266
     267    mapping.addGlobal( 'seg_kernel_data', kernel_data_vbase, kernel_data_size,
     268                       'C_W_', vtype = 'ELF', x = 0, y = 0, pseg = 'RAM',
     269                       binpath = 'build/kernel/kernel.elf', local = False )
     270
     271    mapping.addGlobal( 'seg_kernel_uncdata', kernel_uncdata_vbase, kernel_uncdata_size,
     272                       '__W_', vtype = 'ELF', x = 0, y = 0, pseg = 'RAM',
     273                       binpath = 'build/kernel/kernel.elf', local = False )
    271274
    272275    ### global vsegs for external peripherals / identity mapping
    273276
    274277    mapping.addGlobal( 'seg_iob', iob_base, iob_size, '__W_',
    275                        vtype = 'PERI', x = 0, y = 0, pseg = 'IOB', identity = True )
     278                       vtype = 'PERI', x = 0, y = 0, pseg = 'IOB',
     279                       identity = True )
    276280
    277281    mapping.addGlobal( 'seg_bdv', bdv_base, bdv_size, '__W_',
    278                        vtype = 'PERI', x = 0, y = 0, pseg = 'BDV', identity = True )
     282                       vtype = 'PERI', x = 0, y = 0, pseg = 'BDV',
     283                       identity = True )
    279284
    280285    mapping.addGlobal( 'seg_tty', tty_base, tty_size, '__W_',
    281                        vtype = 'PERI', x = 0, y = 0, pseg = 'TTY', identity = True )
     286                       vtype = 'PERI', x = 0, y = 0, pseg = 'TTY',
     287                       identity = True )
    282288
    283289    mapping.addGlobal( 'seg_nic', nic_base, nic_size, '__W_',
    284                        vtype = 'PERI', x = 0, y = 0, pseg = 'NIC', identity = True )
     290                       vtype = 'PERI', x = 0, y = 0, pseg = 'NIC',
     291                       identity = True )
    285292
    286293    mapping.addGlobal( 'seg_cma', cma_base, cma_size, '__W_',
    287                        vtype = 'PERI', x = 0, y = 0, pseg = 'CMA', identity = True )
     294                       vtype = 'PERI', x = 0, y = 0, pseg = 'CMA',
     295                       identity = True )
    288296
    289297    mapping.addGlobal( 'seg_fbf', fbf_base, fbf_size, '__W_',
    290                        vtype = 'PERI', x = 0, y = 0, pseg = 'FBF', identity = True )
     298                       vtype = 'PERI', x = 0, y = 0, pseg = 'FBF',
     299                       identity = True )
    291300
    292301    mapping.addGlobal( 'seg_pic', pic_base, pic_size, '__W_',
    293                        vtype = 'PERI', x = 0, y = 0, pseg = 'PIC', identity = True )
     302                       vtype = 'PERI', x = 0, y = 0, pseg = 'PIC',
     303                       identity = True )
     304
    294305
    295306    ### global vsegs for internal peripherals, and for schedulers
  • branches/reconfiguration/platforms/tsar_generic_iob/top.cpp

    r760 r766  
    13971397   // simulation loop
    13981398   struct timeval t1,t2;
    1399    const size_t stats_period = 100000; // cycles
    1400 
    1401    if (ncycles == UINT_MAX)
    1402    {
    1403       int n = 0;
    1404       while(1)
    1405       {
    1406          gettimeofday(&t1, NULL);
    1407          sc_start(sc_core::sc_time(stats_period, SC_NS));
    1408          gettimeofday(&t2, NULL);
    1409 
    1410          n += stats_period;
    1411 
    1412          uint64_t ms1 = (uint64_t) t1.tv_sec  * 1000ULL +
    1413             (uint64_t) t1.tv_usec / 1000;
    1414          uint64_t ms2 = (uint64_t) t2.tv_sec  * 1000ULL +
    1415             (uint64_t) t2.tv_usec / 1000;
    1416          std::cerr << "### cycle = " << n
    1417             << " / frequency = "
    1418             << (double) stats_period / (double) (ms2 - ms1) << "Khz"
    1419             << std::endl;
    1420       }
    1421 
    1422       return EXIT_SUCCESS;
    1423    }
    1424 
    1425    gettimeofday(&t1, NULL);
    1426    for (size_t n = 1; n < ncycles; n++)
     1399
     1400   // cycles between stats
     1401   const size_t stats_period = 100000;
     1402   const size_t simul_period = debug_ok ? debug_period : stats_period;
     1403
     1404   for (size_t n = 0; n < ncycles; n += simul_period)
    14271405   {
    14281406      // stats display
    1429       if( (n % stats_period) == 0)
     1407      if((n % stats_period) == 0)
    14301408      {
    1431          gettimeofday(&t2, NULL);
    1432 
    1433          uint64_t ms1 = (uint64_t) t1.tv_sec  * 1000ULL +
    1434             (uint64_t) t1.tv_usec / 1000;
    1435          uint64_t ms2 = (uint64_t) t2.tv_sec  * 1000ULL +
    1436             (uint64_t) t2.tv_usec / 1000;
    1437          std::cerr << "### cycle = " << n
    1438             << " / frequency = "
    1439             << (double) stats_period / (double) (ms2 - ms1) << "Khz"
    1440             << std::endl;
     1409         if (n > 0)
     1410         {
     1411            gettimeofday(&t2, NULL);
     1412
     1413            uint64_t ms1 = (uint64_t) t1.tv_sec  * 1000ULL +
     1414               (uint64_t) t1.tv_usec / 1000;
     1415            uint64_t ms2 = (uint64_t) t2.tv_sec  * 1000ULL +
     1416               (uint64_t) t2.tv_usec / 1000;
     1417            std::cerr << "### cycle = " << n << " / frequency (Khz) = "
     1418               << (double) stats_period / (double) (ms2 - ms1) << std::endl;
     1419         }
    14411420
    14421421         gettimeofday(&t1, NULL);
     
    15651544      }
    15661545
    1567       sc_start(sc_core::sc_time(1, SC_NS));
     1546      sc_start(sc_core::sc_time(simul_period, SC_NS));
    15681547   }
    15691548   return EXIT_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.