Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel_private.hfa

    rbfb9bf5 r13fdf86  
    365365void ready_queue_shrink(struct cluster * cltr);
    366366
    367 //-----------------------------------------------------------------------
    368 // Decrease the width of the ready queue (number of lanes) by 4
    369 void ready_queue_close(struct cluster * cltr);
    370 
    371 //-----------------------------------------------------------------------
    372 // Calc moving average based on existing average, before and current time.
    373 static inline unsigned long long moving_average(unsigned long long currtsc, unsigned long long instsc, unsigned long long old_avg) {
    374         /* paranoid */ verifyf( currtsc < 45000000000000000, "Suspiciously large current time: %'llu (%llx)\n", currtsc, currtsc );
    375         /* paranoid */ verifyf( instsc  < 45000000000000000, "Suspiciously large insert time: %'llu (%llx)\n", instsc, instsc );
    376         /* paranoid */ verifyf( old_avg < 15000000000000, "Suspiciously large previous average: %'llu (%llx)\n", old_avg, old_avg );
    377 
    378         const unsigned long long new_val = currtsc > instsc ? currtsc - instsc : 0;
    379         const unsigned long long total_weight = 16;
    380         const unsigned long long new_weight   = 4;
    381         const unsigned long long old_weight = total_weight - new_weight;
    382         const unsigned long long ret = ((new_weight * new_val) + (old_weight * old_avg)) / total_weight;
    383         return ret;
    384 }
    385 
    386 //-----------------------------------------------------------------------
    387 // Calc age a timestamp should be before needing help.
    388 forall(Data_t * | { unsigned long long ts(Data_t & this); })
    389 static inline unsigned long long calc_cutoff(
    390         const unsigned long long ctsc,
    391         const processor * proc,
    392         size_t count,
    393         Data_t * data,
    394         __timestamp_t * tscs,
    395         const unsigned shard_factor
    396 ) {
    397         unsigned start = proc->rdq.id;
    398         unsigned long long max = 0;
    399         for(i; shard_factor) {
    400                 unsigned long long ptsc = ts(data[start + i]);
    401                 if(ptsc != -1ull) {
    402                         /* paranoid */ verify( start + i < count );
    403                         unsigned long long tsc = moving_average(ctsc, ptsc, tscs[start + i].ma);
    404                         if(tsc > max) max = tsc;
    405                 }
    406         }
    407         return (max + 2 * max) / 2;
    408 }
    409 
    410 static struct {
    411         const unsigned readyq;
    412 } __shard_factor __attribute__((unused)) = { 2 };
    413367
    414368// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.