- File:
-
- 1 edited
-
libcfa/src/concurrency/kernel_private.hfa (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel_private.hfa
rbfb9bf5 r13fdf86 365 365 void ready_queue_shrink(struct cluster * cltr); 366 366 367 //-----------------------------------------------------------------------368 // Decrease the width of the ready queue (number of lanes) by 4369 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_factor396 ) {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 };413 367 414 368 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.