Changeset 7f54356
- Timestamp:
- May 5, 2021, 2:42:18 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- ce9ed84
- Parents:
- a5db488 (diff), b9376fe (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- libcfa/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/common.hfa
ra5db488 r7f54356 10 10 // Created On : Wed Jul 11 17:54:36 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Aug 15 08:51:29 202013 // Update Count : 1 412 // Last Modified On : Wed May 5 14:02:04 2021 13 // Update Count : 18 14 14 // 15 15 … … 67 67 68 68 static inline { 69 char min( char t1, char t2 ) { return t1 < t2 ? t1 : t2; } // optimization 70 intptr_t min( intptr_t t1, intptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 71 uintptr_t min( uintptr_t t1, uintptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 69 char min( char v1, char v2 ) { return v1 < v2 ? v1 : v2; } // optimization 70 int min( int v1, int v2 ) { return v1 < v2 ? v1 : v2; } 71 unsigned int min( unsigned int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; } 72 long int min( long int v1, long int v2 ) { return v1 < v2 ? v1 : v2; } 73 unsigned long int min( unsigned long int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; } 74 long long int min( long long int v1, long long int v2 ) { return v1 < v2 ? v1 : v2; } 75 unsigned long long int min( unsigned long long int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; } 72 76 forall( T | { int ?<?( T, T ); } ) 73 T min( T t1, T t2 ) { return t1 < t2 ? t1 : t2; }77 T min( T v1, T v2 ) { return v1 < v2 ? v1 : v2; } 74 78 75 char max( char t1, char t2 ) { return t1 > t2 ? t1 : t2; } // optimization 76 intptr_t max( intptr_t t1, intptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 77 uintptr_t max( uintptr_t t1, uintptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 79 char max( char v1, char v2 ) { return v1 > v2 ? v1 : v2; } // optimization 80 int max( int v1, int v2 ) { return v1 > v2 ? v1 : v2; } 81 unsigned int max( unsigned int v1, unsigned int v2 ) { return v1 > v2 ? v1 : v2; } 82 long int max( long int v1, long int v2 ) { return v1 > v2 ? v1 : v2; } 83 unsigned long int max( unsigned long int v1, unsigned long int v2 ) { return v1 > v2 ? v1 : v2; } 84 long long int max( long long int v1, long long int v2 ) { return v1 > v2 ? v1 : v2; } 85 unsigned long long int max( unsigned long long int v1, unsigned long long int v2 ) { return v1 > v2 ? v1 : v2; } 78 86 forall( T | { int ?>?( T, T ); } ) 79 T max( T t1, T t2 ) { return t1 > t2 ? t1 : t2; }87 T max( T v1, T v2 ) { return v1 > v2 ? v1 : v2; } 80 88 81 89 forall( T | { T min( T, T ); T max( T, T ); } ) -
libcfa/src/concurrency/ready_queue.cfa
ra5db488 r7f54356 398 398 399 399 if(proc->rdq.target == -1u) { 400 proc->rdq.target = __tls_rand() % lanes.count; 401 unsigned it1 = proc->rdq.itr; 402 unsigned it2 = proc->rdq.itr + 1; 403 unsigned idx1 = proc->rdq.id + (it1 % READYQ_SHARD_FACTOR); 404 unsigned idx2 = proc->rdq.id + (it2 % READYQ_SHARD_FACTOR); 400 _Static_assert(READYQ_SHARD_FACTOR == 2); 401 unsigned idx1 = proc->rdq.id + 0; 402 unsigned idx2 = proc->rdq.id + 1; 405 403 unsigned long long tsc1 = ts(lanes.data[idx1]); 406 404 unsigned long long tsc2 = ts(lanes.data[idx2]); 407 proc->rdq.cutoff = min(tsc1, tsc2); 408 if(proc->rdq.cutoff == 0) proc->rdq.cutoff = -1ull; 405 proc->rdq.target = __tls_rand() % lanes.count; 406 407 // WARNING: std::min is polymorphic and therefore causes 500% slowdown instead of the expected 2% 408 proc->rdq.cutoff = tsc1 < tsc2 ? tsc1 : tsc2; 409 409 } 410 410 else { … … 418 418 419 419 for(READYQ_SHARD_FACTOR) { 420 unsigned i = proc->rdq.id + ( --proc->rdq.itr% READYQ_SHARD_FACTOR);420 unsigned i = proc->rdq.id + (proc->rdq.itr++ % READYQ_SHARD_FACTOR); 421 421 if($thread * t = try_pop(cltr, i __STATS(, __tls_stats()->ready.pop.local))) return t; 422 422 } … … 469 469 // Actually pop the list 470 470 struct $thread * thrd; 471 thrd = pop(lane); 471 unsigned long long tsv; 472 [thrd, tsv] = pop(lane); 472 473 473 474 /* paranoid */ verify(thrd); … … 481 482 482 483 #if defined(USE_WORK_STEALING) 483 lanes.tscs[w].tv = t hrd->link.ts;484 lanes.tscs[w].tv = tsv; 484 485 #endif 485 486 … … 663 664 while(!is_empty(lanes.data[idx])) { 664 665 struct $thread * thrd; 665 thrd = pop(lanes.data[idx]); 666 unsigned long long _; 667 [thrd, _] = pop(lanes.data[idx]); 666 668 667 669 push(cltr, thrd); -
libcfa/src/concurrency/ready_subqueue.hfa
ra5db488 r7f54356 53 53 // Push a thread onto this lane 54 54 // returns true of lane was empty before push, false otherwise 55 void push( __intrusive_lane_t & this, $thread * node ) {55 static inline void push( __intrusive_lane_t & this, $thread * node ) { 56 56 /* paranoid */ verify( node->link.next == 0p ); 57 57 /* paranoid */ verify( node->link.ts == 0 ); … … 77 77 // returns popped 78 78 // returns true of lane was empty before push, false otherwise 79 $thread *pop( __intrusive_lane_t & this ) {79 static inline [* $thread, unsigned long long] pop( __intrusive_lane_t & this ) { 80 80 /* paranoid */ verify( this.anchor.next != 0p ); 81 81 /* paranoid */ verify( this.anchor.ts != 0 ); 82 82 83 83 // Get the relevant nodes locally 84 unsigned long long ts = this.anchor.ts; 84 85 $thread * node = this.anchor.next; 85 86 this.anchor.next = node->link.next; … … 94 95 /* paranoid */ verify( node->link.next == 0p ); 95 96 /* paranoid */ verify( node->link.ts == 0 ); 96 return node;97 return [node, ts]; 97 98 } 98 99 -
libcfa/src/heap.cfa
ra5db488 r7f54356 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Apr 20 21:20:48 202113 // Update Count : 103 312 // Last Modified On : Wed May 5 13:11:28 2021 13 // Update Count : 1035 14 14 // 15 15 … … 28 28 #include "bits/locks.hfa" // __spinlock_t 29 29 #include "startup.hfa" // STARTUP_PRIORITY_MEMORY 30 #include "math.hfa" // ceiling30 #include "math.hfa" // min 31 31 #include "bitmanip.hfa" // is_pow2, ceiling2 32 32
Note: See TracChangeset
for help on using the changeset viewer.