Пример #1
0
int main(int argc, char* argv[]) {
        if (argc != 4) {
            printf("Incorrect number of arguments, must specify number of cores, array size, number of loops\n");
            exit(-1);
        }


        num_cores = atol(argv[1]);
        if(num_cores <= 0){
                printf("Invalid number of cores\n");
                exit(-1);
	}

        arraySize = atol(argv[2]);
        if(arraySize <= 0){
                printf("Invalid array size\n");
                exit(-1);
        }

        loops = atol(argv[3]);
        if(loops < 0){
                printf("Invalid number of loops\n");
                exit(-1);
	}

    srand(time(NULL));

	debug_printf("Spanning cores\n");
	
	errval_t err;
	for (int core = 1; core < num_cores; core++) {
		err = domain_new_dispatcher(core, span_cb, NULL);

		if (err_is_fail(err)) {
			DEBUG_ERR(err, "failed span %d", core);
		} 
	}

	while (num_cores != 1 && !all_spanned) {
		thread_yield();
	}
	debug_printf("Spanning complete!\n");	

    globalArray = (float*) malloc(arraySize * sizeof(float));

	unsigned long loops_[] = {1,100,10000,1000000,100000000,1000000000};
	for(int i = 0; i < 6; i++){	    
        loops = loops_[i];
	float shared = performAveraging(averageSharedBF);
	float local = performAveraging(averageLocalBF);
   	    printf("SHARED BF (%lu): %fs\n", loops, shared);
    	printf("LOCAL BF (%lu): %fs\n", loops, local);
        printf("\n");
	}

    free(globalArray);

    return 0;
}
Пример #2
0
//mobility change 14-4-10
void updateNeighborInfo(int node, int infra, int rssi)
{
	//if(node == 25)  // mobility hack
	//{
	int i,j,k;
	//int fragment_hearing;
	struct event * anEvent;
	
	if(nodeID[node].infra_list[infra].is_neighbor == TRUE)
	{
	nodeID[node].infra_list[infra].timeLastHeard = simTime;
	performAveraging(node, infra, rssi);
	//fprintf(stderr,"Node %d is now a neighbor of %d \n", infra, node);
	}
	else
	{
		if(nodeID[node].infra_list[infra].times_observed == INFRA_HEARD_THRESHOLD)
		{
		//perform averaging, send reactive update, set is_neighbor to true, and start timer
		nodeID[node].infra_list[infra].infra_node = infra;
		nodeID[node].infra_list[infra].is_neighbor = TRUE;
		nodeID[node].infra_list[infra].timeLastHeard = simTime;

		performAveraging(node, infra, rssi);
		//fragment_hearing = FRAGMENT_HEARING(node,infra); 
		anEvent = getNextExpectedFragmentEvent(simTime + FRAGMENT_TIMEOUT, node, infra);
		insertEvent(anEvent);
		//mobility hack 16-4-10, this is reactive, should not result in another topology update event being set. 
		if(simTime > 1200000)
		{
			anEvent = getTopologyUpdateEvent(simTime, node, node, nodeID[node].parent,TX, REACTIVE);	
			insertEvent(anEvent);
		}

			//fprintf(stderr,"RSSI values with which neighbor %d is heard are \n", infra);
			for(i=0; i < INFRA_HEARD_THRESHOLD; i++)
			{
			//fprintf(stderr," RSSI at position %d is %d \n", i, nodeID[node].infra_list[infra].rssi[i]);
			}
			
		}
		else
		{
			for(i=0; i < INFRA_HEARD_THRESHOLD; i++)
			{
				if(nodeID[node].infra_list[infra].rssi[i] == 0) // mobility hack
				{
				nodeID[node].infra_list[infra].rssi[i] = rssi;
				break;
				}
			}
		nodeID[node].infra_list[infra].times_observed++;
		//fprintf(stderr,"Infra %d heard for %d times \n", infra, nodeID[node].infra_list[infra].times_observed);
		}
	}
	//}

}