Changeset 708ae38 for libcfa/src/concurrency/kernel/private.hfa
- Timestamp:
- Mar 15, 2022, 5:11:50 PM (2 years ago)
- Branches:
- ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
- Children:
- 9d8124f
- Parents:
- a552a8c
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/private.hfa
ra552a8c r708ae38 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // kernel _private.hfa --7 // kernel/private.hfa -- 8 8 // 9 9 // Author : Thierry Delisle … … 17 17 18 18 #if !defined(__cforall_thread__) 19 #error kernel _private.hfa should only be included in libcfathread source19 #error kernel/private.hfa should only be included in libcfathread source 20 20 #endif 21 21 … … 33 33 #else 34 34 #ifndef _GNU_SOURCE 35 #error kernel _private requires gnu_source35 #error kernel/private requires gnu_source 36 36 #endif 37 37 #include <sched.h> … … 369 369 void ready_queue_close(struct cluster * cltr); 370 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 414 371 // Local Variables: // 415 372 // mode: c //
Note: See TracChangeset
for help on using the changeset viewer.