예제 #1
0
static void
save_one(struct savebuf *f, struct svalue *v)
{
    static char buf[48];
    static int depth = 0;

    if (++depth > MAX_DEPTH)
    {
        free(f->buf);
        depth = 0;
        error("Too deep recursion\n");
    }

    switch(v->type) {
    case T_FLOAT:
	(void)sprintf(buf,"#%a#", v->u.real);
	add_strbuf(f, buf);
	break;
    case T_NUMBER:
	(void)sprintf(buf, "%lld", v->u.number);
	add_strbuf(f, buf);
	break;
    case T_STRING:
	save_string(f, v->u.string);
	break;
    case T_POINTER:
	save_array(f, v->u.vec);
	break;
    case T_MAPPING:
	save_mapping(f, v->u.map);
	break;
    case T_OBJECT:
	(void)sprintf(buf, "$%d@", v->u.ob->created);
	add_strbuf(f, buf);
	add_strbuf(f, v->u.ob->name);
	add_strbuf(f, "$");
        break;
#if 0
    case T_FUNCTION:
	add_strbuf(f, "&FUNCTION&"); /* XXX function */
	break;
#endif
    default:
	add_strbuf(f, "0");
	break;
    }

    depth--;
}
예제 #2
0
/**
 * Main routine of the mapping agent.
 */
void *agent_routine(void *data) {
    agent_t *agent = (agent_t*) data;
    assert(agent != NULL);

    while (1) {
        int i;

#ifdef THREADS_ENABLE
        // wait threads synchro
        for (i = 0; i < agent->nb_threads; i++) {
            orcc_semaphore_wait(agent->sem_agent);
        }
#endif

        print_orcc_trace(ORCC_VL_VERBOSE_1, "Remap the actors...");
        compute_workloads(agent->network);
        do_mapping(agent->network, agent->options, agent->mapping);
		if (agent->options->mapping_output_file) {
			save_mapping(agent->options->mapping_output_file, agent->mapping);
		}
        apply_mapping(agent->mapping, agent->scheduler, agent->nb_threads);

        if(opt->mapping_repetition == REMAP_ALWAYS) {
            reset_profiling(agent->network);
            resetMapping();
        } else {
            need_remap = FALSE;
            fpsPrintInit_mapping();
        }

#ifdef THREADS_ENABLE
        // wakeup all threads
        for (i = 0; i < agent->nb_threads; i++) {
            orcc_semaphore_set(agent->scheduler->schedulers[i]->sem_thread);
        }
#endif

    }
		
    return 0;
}