static void threadWait (void* argPtr) { long threadId = *(long*)argPtr; int i; for (i = 0; i < LOCKS; i++) { flags[i] = 0; } THREAD_LOCAL_SET(global_threadId, (long)threadId); cpu_set_t my_set; CPU_ZERO(&my_set); CPU_SET(threadId % 8, &my_set); sched_setaffinity(0, sizeof(cpu_set_t), &my_set); while (1) { THREAD_BARRIER(global_barrierPtr, threadId); /* wait for start parallel */ if (global_doShutdown) { break; } global_funcPtr(global_argPtr); THREAD_BARRIER(global_barrierPtr, threadId); /* wait for end parallel */ if (threadId == 0) { endEnergy(); break; } } }
static void threadWait (void* argPtr) { long threadId = *(long*)argPtr; THREAD_LOCAL_SET(global_threadId, (long)threadId); phys_id = the_cores[(int)threadId]; cluster_id = get_cluster(phys_id); unsigned int i = 0; for (; i < LOCKS; i++) { local_th_data[i][phys_id] = init_lock_local(phys_id, the_lock[i]); } cpu_set_t my_set; CPU_ZERO(&my_set); CPU_SET(threadId % 8, &my_set); sched_setaffinity(0, sizeof(cpu_set_t), &my_set); while (1) { THREAD_BARRIER(global_barrierPtr, threadId); /* wait for start parallel */ if (global_doShutdown) { break; } global_funcPtr(global_argPtr); THREAD_BARRIER(global_barrierPtr, threadId); /* wait for end parallel */ if (threadId == 0) { endEnergy(); break; } } }
/* ============================================================================= * threadWait * -- Synchronizes all threads to start/stop parallel section * ============================================================================= */ static void threadWait (void* argPtr) { long threadId = *(long*)argPtr; THREAD_LOCAL_SET(global_threadId, (long)threadId); while (1) { THREAD_BARRIER(global_barrierPtr, threadId); /* wait for start parallel */ if (global_doShutdown) { break; } global_funcPtr(global_argPtr); /* #ifdef SEPERATE_MAINTENANCE */ /* THREAD_BARRIER(global_barrierPtr2, threadId); */ /* //set something to false */ /* //printf("first barier"); */ /* main_thd_done = TRUE; */ /* THREAD_BARRIER(global_barrierPtr3, threadId); */ /* #else */ THREAD_BARRIER(global_barrierPtr, threadId); /* wait for end parallel */ /* #endif */ if (threadId == 0) { break; } } }
/* ============================================================================= * threadWait * -- Synchronizes all threads to start/stop parallel section * ============================================================================= */ static void threadWait (void* argPtr) { thread_args_t* args = (thread_args_t*) argPtr; long threadId = args->threadId; commits = &(args->commits); aborts = &(args->aborts); retriesProf = &(args->retries); ucbProf = &(args->ucb); int sz = 100; memoized_blocks = (memoized_choices_t*) malloc(sz * sizeof(memoized_choices_t)); for (sz--; sz >= 0; sz-- ) { memoized_choices_t* block = &(memoized_blocks[sz]); block->runs = 0; block->havingCapacityAborts = 0; block->retries = 0; block->commitsHTM = 1; block->believedCapacity = 1; block->believedTransient = 1; block->believedGiveUp = 1; block->abortsCapacity = 0; block->abortsTransient = 0; block->cyclesCapacity = 100; block->cyclesTransient = 100; block->cyclesGiveUp = 100; block->retries = 5; block->lastCycles = 0; block->lastRetries = 5; block->bestEverCycles = 0; block->bestEverRetries = 5; } randomFallback = random_alloc(); random_seed(randomFallback, time(NULL)); THREAD_LOCAL_SET(global_threadId, (long)threadId); bindThread(threadId); while (1) { THREAD_BARRIER(global_barrierPtr, threadId); /* wait for start parallel */ if (global_doShutdown) { break; } global_funcPtr(global_argPtr); THREAD_BARRIER(global_barrierPtr, threadId); /* wait for end parallel */ if (threadId == 0) { break; } } }
/* ============================================================================= * threadWait * -- Synchronizes all threads to start/stop parallel section * ============================================================================= */ static void threadWait (void* argPtr) { long threadId = *(long*)argPtr; THREAD_LOCAL_SET(global_threadId, (long)threadId); while (1) { THREAD_BARRIER(global_barrierPtr, threadId); /* wait for start parallel */ if (global_doShutdown) { break; } global_funcPtr(global_argPtr); THREAD_BARRIER(global_barrierPtr, threadId); /* wait for end parallel */ if (threadId == 0) { break; } } }