Пример #1
0
Файл: cfio.c Проект: CFIO/CFIO
int cfio_finalize()
{
    int ret,flag;
    cfio_msg_t *msg;

    ret = MPI_Finalized(&flag);
    if(flag)
    {
	error("***You should not call MPI_Finalize before cfio_Finalized*****\n");
	return CFIO_ERROR_FINAL_AFTER_MPI;
    }
    if(cfio_map_proc_type(rank) == CFIO_MAP_TYPE_CLIENT)
    {
	cfio_send_io_done(&msg, rank);
    }
    
    if(cfio_map_proc_type(rank) == CFIO_MAP_TYPE_SERVER)
    {
	cfio_server_final();
    }else if(cfio_map_proc_type(rank) == CFIO_MAP_TYPE_CLIENT)
    {
	cfio_id_final();

	cfio_send_final();
    }

    cfio_map_final();
    debug(DEBUG_CFIO, "success return.");
    return CFIO_ERROR_NONE;
}
Пример #2
0
Файл: cfio.c Проект: CFIO/CFIO
int cfio_proc_type()
{
    int type;

    type = cfio_map_proc_type(rank);

    debug(DEBUG_CFIO, "rank(%d)'s type = %d", rank, type);

    return type;
}
Пример #3
0
int cfio_msg_get_max_size(int proc_id)
{   
    int client_num_of_server, max_msg_size, client_amount, server_id; 
    
    if (cfio_map_proc_type(proc_id) == CFIO_MAP_TYPE_CLIENT) {
	server_id = cfio_map_get_server_of_client(proc_id);
	client_num_of_server = cfio_map_get_client_num_of_server(server_id);
    } else if (cfio_map_proc_type(proc_id) == CFIO_MAP_TYPE_SERVER) {
	client_num_of_server = cfio_map_get_client_num_of_server(proc_id);
    }
    client_amount = cfio_map_get_client_amount();

    max_msg_size = MSG_BUF_SIZE;
    max_msg_size = min(max_msg_size, RECV_BUF_SIZE / client_num_of_server / 2);
    max_msg_size = min(max_msg_size, SEND_BUF_SIZE / 2);
    max_msg_size = max(max_msg_size, SEND_MSG_MIN_SIZE / client_amount);
    
    //printf("max_msg_size = %d\n", max_msg_size);

    return max_msg_size;
}
Пример #4
0
Файл: cfio.c Проект: CFIO/CFIO
int cfio_init(int x_proc_num, int y_proc_num, int ratio)
{
    int rc, i;
    int size;
    int root = 0;
    int error, ret;
    int server_proc_num;
    int best_server_amount;
    MPI_Group group, client_group, server_group;
    int *ranks;

    //set_debug_mask(DEBUG_CFIO | DEBUG_SERVER);// | DEBUG_MSG | DEBUG_SERVER);
    rc = MPI_Initialized(&i); 
    if( !i )
    {
	error("MPI should be initialized before the cfio\n");
	return -1;
    }

    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    //if(rank == 100)
    //{
    //    set_debug_mask(DEBUG_MAP);
    //}
    
    client_num = x_proc_num * y_proc_num;
    server_proc_num = size - client_num;
    if(server_proc_num < 0)
    {
	server_proc_num = 0;
    }
    
    best_server_amount = (int)((double)client_num / ratio);
    if(best_server_amount <= 0)
    {
	best_server_amount = 1;
    }

    MPI_Comm_group(MPI_COMM_WORLD, &group);
    
    //ranks = malloc(client_num * sizeof(int));
    //for(i = 0; i < client_num; i ++)
    //{
    //    ranks[i] = i;
    //}
    //MPI_Group_incl(group, client_num, ranks, &client_group);
    //MPI_Comm_create(MPI_COMM_WORLD, client_group, &client_comm);
    //free(ranks);

    ranks = malloc(server_proc_num * sizeof(int));
    for(i = 0; i < server_proc_num; i ++)
    {
	ranks[i] = i + client_num;
    }
    MPI_Group_incl(group, server_proc_num, ranks, &server_group);
    MPI_Comm_create(MPI_COMM_WORLD, server_group, &server_comm);
    free(ranks);

    //times_start();

    if((ret = cfio_map_init(
		    x_proc_num, y_proc_num, server_proc_num, 
		    best_server_amount, MPI_COMM_WORLD, server_comm)) < 0)
    {
	error("Map Init Fail.");
	return ret;
    }

    if(cfio_map_proc_type(rank) == CFIO_MAP_TYPE_SERVER)
    {
	if((ret = cfio_server_init()) < 0)
	{
	    error("");
	    return ret;
	}
	if((ret = cfio_server_start()) < 0)
	{
	    error("");
	    return ret;
	}
    }else if(cfio_map_proc_type(rank) == CFIO_MAP_TYPE_CLIENT)
    {
	if((ret = cfio_send_init(CLIENT_BUF_SIZE)) < 0)
	{
	    error("");
	    return ret;
	}

	if((ret = cfio_id_init(CFIO_ID_INIT_CLIENT)) < 0)
	{
	    error("");
	    return ret;
	}
	
    }

    debug(DEBUG_CFIO, "success return.");
    return CFIO_ERROR_NONE;
}