Changeset 708ae38 for libcfa/src/concurrency/kernel
- Timestamp:
- Mar 15, 2022, 5:11:50 PM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
- Children:
- 9d8124f
- Parents:
- a552a8c
- Location:
- libcfa/src/concurrency/kernel
- Files:
-
- 1 added
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/cluster.cfa
ra552a8c r708ae38 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // cluster.cfa.cfa -- file that includes helpers for subsystem that need 8 // cluster wide support 7 // cluster.cfa -- file that includes helpers for subsystem that need cluster wide support 9 8 // 10 9 // Author : Thierry Delisle 11 // Created On : Fri 0311 12:39:24 202210 // Created On : Fri Mar 11 12:39:24 2022 12 11 // Last Modified By : 13 12 // Last Modified On : … … 20 19 #include "bits/defs.hfa" 21 20 #include "device/cpu.hfa" 22 #include "kernel_private.hfa" 21 #include "kernel/cluster.hfa" 22 #include "kernel/private.hfa" 23 23 24 24 #include "stdlib.hfa" … … 247 247 // fixes the list so that the pointers back to anchors aren't left dangling 248 248 static inline void fix(__intrusive_lane_t & ll) { 249 250 251 252 249 if(is_empty(ll)) { 250 verify(ll.anchor.next == 0p); 251 ll.prev = mock_head(ll); 252 } 253 253 } 254 254 … … 321 321 } 322 322 323 // Fix the io times 324 cltr->sched.io.count = target; 325 fix_times(cltr->sched.io.tscs, cltr->sched.io.count); 326 323 327 // realloc the caches 324 328 cltr->sched.caches = alloc( target, cltr->sched.caches`realloc ); … … 406 410 cltr->sched.caches = alloc( target, cltr->sched.caches`realloc ); 407 411 408 412 // Fix the io times 413 cltr->sched.io.count = target; 414 fix_times(cltr->sched.io.tscs, cltr->sched.io.count); 409 415 410 416 reassign_cltr_id(cltr); -
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 // -
libcfa/src/concurrency/kernel/startup.cfa
ra552a8c r708ae38 32 32 33 33 // CFA Includes 34 #include "kernel _private.hfa"34 #include "kernel/private.hfa" 35 35 #include "startup.hfa" // STARTUP_PRIORITY_XXX 36 36 #include "limits.hfa"
Note: See TracChangeset
for help on using the changeset viewer.