Changes in / [b0b89a8:9373b6a]
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/readyQ/cycle.cfa
rb0b89a8 r9373b6a 85 85 } 86 86 87 printf("Duration (ms) : %'l d\n", (end - start)`dms);87 printf("Duration (ms) : %'lf\n", (end - start)`dms); 88 88 printf("Number of processors : %'d\n", nprocs); 89 89 printf("Number of threads : %'d\n", tthreads); -
benchmark/readyQ/locality.cfa
rb0b89a8 r9373b6a 126 126 // ================================================== 127 127 // Do some work by accessing 'cnt' cells in the array 128 __attribute__((noinline)) void work(MyData & data, size_t cnt , uint64_t & state) {129 for (cnt ) {128 __attribute__((noinline)) void work(MyData & data, size_t cnt_, uint64_t & state) { 129 for (cnt_) { 130 130 access(data, __xorshift64(state)); 131 131 } … … 200 200 201 201 if( nspots == 0 ) { nspots = nthreads - nprocs; } 202 if( nspots == 0 ) { 203 fprintf(stderr, "--nspots must be set or --nthreads set to something bigger than --nprocs\n"); 204 exit(EXIT_FAILURE); 205 } 202 206 203 207 Time start, end; -
benchmark/readyQ/yield.cpp
rb0b89a8 r9373b6a 29 29 #include "libfibre/fibre.h" 30 30 31 F ibreBarrier * barrier;31 FredBarrier * barrier; 32 32 struct __attribute__((aligned(128))) counter_t { 33 33 int value = 0; … … 66 66 67 67 const char * arg = optarg ? optarg : ""; 68 size_t len = 0;69 68 char * end; 70 69 switch(opt) { … … 111 110 112 111 FibreInit(); 113 barrier = new F ibreBarrier(nthreads + 1);112 barrier = new FredBarrier(nthreads + 1); 114 113 { 115 114 Context::CurrCluster().addWorkers(nprocs); -
libcfa/prelude/bootloader.cf
rb0b89a8 r9373b6a 3 3 char ** cfa_args_argv; 4 4 char ** cfa_args_envp; 5 int cfa_main_returned = 0; 5 6 6 7 int main(int argc, char* argv[], char* envp[]) { … … 8 9 cfa_args_argv = argv; 9 10 cfa_args_envp = envp; 10 return invoke_main(argc, argv, envp); 11 int ret = invoke_main(argc, argv, envp); 12 cfa_main_returned = 1; 13 return ret; 11 14 } -
libcfa/src/concurrency/invoke.h
rb0b89a8 r9373b6a 170 170 bool corctx_flag; 171 171 172 int last_cpu; 173 172 174 //SKULLDUGGERY errno is not save in the thread data structure because returnToKernel appears to be the only function to require saving and restoring it 173 175 -
libcfa/src/concurrency/kernel.cfa
rb0b89a8 r9373b6a 394 394 __builtin_prefetch( thrd_dst->context.SP ); 395 395 396 int curr = __kernel_getcpu(); 397 if(thrd_dst->last_cpu != curr) { 398 int64_t l = thrd_dst->last_cpu; 399 int64_t c = curr; 400 int64_t v = (l << 32) | c; 401 __push_stat( __tls_stats(), v, false, "Processor", this ); 402 } 403 404 thrd_dst->last_cpu = curr; 405 396 406 __cfadbg_print_safe(runtime_core, "Kernel : core %p running thread %p (%s)\n", this, thrd_dst, thrd_dst->self_cor.name); 397 407 … … 470 480 #if !defined(__CFA_NO_STATISTICS__) 471 481 __tls_stats()->ready.threads.threads++; 472 __push_stat( __tls_stats(), __tls_stats()->ready.threads.threads, false, "Processor", this );473 482 #endif 474 483 // This is case 2, the racy case, someone tried to run this thread before it finished blocking … … 488 497 #if !defined(__CFA_NO_STATISTICS__) 489 498 __tls_stats()->ready.threads.threads--; 490 __push_stat( __tls_stats(), __tls_stats()->ready.threads.threads, false, "Processor", this );491 499 #endif 492 500 … … 570 578 __tls_stats()->ready.threads.extunpark++; 571 579 } 572 __push_stat( __tls_stats(), __tls_stats()->ready.threads.threads, false, "Processor", kernelTLS().this_processor );573 580 } 574 581 else { 575 582 __atomic_fetch_add(&cl->stats->ready.threads.threads, 1, __ATOMIC_RELAXED); 576 583 __atomic_fetch_add(&cl->stats->ready.threads.extunpark, 1, __ATOMIC_RELAXED); 577 __push_stat( cl->stats, cl->stats->ready.threads.threads, true, "Cluster", cl );578 584 } 579 585 #endif -
libcfa/src/concurrency/kernel.hfa
rb0b89a8 r9373b6a 67 67 unsigned target; 68 68 unsigned last; 69 unsigned cnt; 69 70 unsigned long long int cutoff; 70 71 } rdq; -
libcfa/src/concurrency/kernel/startup.cfa
rb0b89a8 r9373b6a 478 478 state = Start; 479 479 self_cor{ info }; 480 last_cpu = __kernel_getcpu(); 480 481 curr_cor = &self_cor; 481 482 curr_cluster = mainCluster; -
libcfa/src/concurrency/ready_queue.cfa
rb0b89a8 r9373b6a 345 345 /* paranoid */ verify(lanes.count < 65536); // The following code assumes max 65536 cores. 346 346 /* paranoid */ verify(map.count < 65536); // The following code assumes max 65536 cores. 347 uint64_t chaos = __tls_rand(); 348 uint64_t high_chaos = (chaos >> 32); 349 uint64_t mid_chaos = (chaos >> 16) & 0xffff; 350 uint64_t low_chaos = chaos & 0xffff; 351 352 unsigned me = map.self; 353 unsigned cpu_chaos = map.start + (mid_chaos % map.count); 354 bool global = cpu_chaos == me; 355 356 if(global) { 357 proc->rdq.target = high_chaos % lanes.count; 347 348 if(0 == (__tls_rand() % 10_000)) { 349 proc->rdq.target = __tls_rand() % lanes.count; 358 350 } else { 359 proc->rdq.target = (cpu_chaos * READYQ_SHARD_FACTOR) + (low_chaos % READYQ_SHARD_FACTOR); 351 unsigned cpu_chaos = map.start + (__tls_rand() % map.count); 352 proc->rdq.target = (cpu_chaos * READYQ_SHARD_FACTOR) + (__tls_rand() % READYQ_SHARD_FACTOR); 360 353 /* paranoid */ verify(proc->rdq.target >= (map.start * READYQ_SHARD_FACTOR)); 361 354 /* paranoid */ verify(proc->rdq.target < ((map.start + map.count) * READYQ_SHARD_FACTOR)); -
libcfa/src/concurrency/thread.cfa
rb0b89a8 r9373b6a 34 34 preempted = __NO_PREEMPTION; 35 35 corctx_flag = false; 36 last_cpu = __kernel_getcpu(); 36 37 curr_cor = &self_cor; 37 38 self_mon.owner = &this;
Note:
See TracChangeset
for help on using the changeset viewer.