示例#1
0
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;
        }
    }
}
示例#2
0
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;
        }
    }
}
示例#3
0
/* =============================================================================
 * 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;
        }
    }
}
示例#4
0
/* =============================================================================
 * 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;
        }
    }
}
示例#5
0
void BaseContainer::tx_start() {
    //    LogMap::accessor writer;
    //    assert(undo_logs.insert(writer, thread_getId()));
    auto undo_log = get_log();
    if (undo_log) {
        undo_log->clear();
    } else {
        if (THREAD_LOCAL_SET(key, new Log())) {
            //        fprintf(stderr, "fail to set key at address %ld.\n", (long) &key);
        } else {
            //        fprintf(stderr, "able to set key at address %ld.\n", (long) &key);
        }
    }
    return;
}
示例#6
0
文件: thread.c 项目: amohtasham/rstm
/* =============================================================================
 * 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;
        }
    }
}