Exemple #1
0
int cfio_recv_init()
{
    int i, error;

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    client_num = cfio_map_get_client_num_of_server(rank);

    msg_head = malloc(client_num * sizeof(cfio_msg_t));
    if(NULL == msg_head)
    {
        return CFIO_ERROR_MALLOC;
    }
    for(i = 0; i < client_num; i ++)
    {
        INIT_QLIST_HEAD(&(msg_head[i].link));
    }

    buffer = malloc(client_num *sizeof(cfio_buf_t*));
    if(NULL == buffer)
    {
        return CFIO_ERROR_MALLOC;
    }
    for(i = 0; i < client_num; i ++)
    {
        buffer[i] = cfio_buf_open(RECV_BUF_SIZE / client_num, &error);
        if(NULL == buffer[i])
        {
            error("");
            return error;
        }
    }

    return CFIO_ERROR_NONE;
}
Exemple #2
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;
}
Exemple #3
0
int cfio_server_init()
{
    init_time = times_cur();

    int i;
    int ret = 0;
    int x_proc_num, y_proc_num;

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if((ret = cfio_recv_init()) < 0)
    {
        error("");
        return ret;
    }

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

    if((ret = cfio_io_init(rank)) < 0)
    {
        error("");
        return ret;
    }

    times_init();

    client_num = cfio_map_get_client_num_of_server(rank);
    recv_bufs = malloc(sizeof(char *) * client_num);
    if (!recv_bufs) {
        printf("line %d malloc error \n", __LINE__);
        return CFIO_ERROR_MALLOC;
    }
    SERVER_REGION_SIZE = RECV_BUF_SIZE / client_num;
    for (i = 0; i < client_num; ++i) {
        recv_bufs[i] = malloc(sizeof(char) * SERVER_REGION_SIZE);
        if (!recv_bufs[i]) {
            printf("line %d malloc error \n", __LINE__);
            return CFIO_ERROR_MALLOC;
        }
    }

    buf_addrs = malloc(sizeof(cfio_buf_addr_t *) * client_num);
    if (!buf_addrs) {
        printf("line %d malloc error \n", __LINE__);
        return CFIO_ERROR_MALLOC;
    }
    for (i = 0; i < client_num; ++i) {
        buf_addrs[i] = malloc(sizeof(cfio_buf_addr_t));
        if (!buf_addrs[i]) {
            printf("line %d malloc error \n", __LINE__);
            return CFIO_ERROR_MALLOC;
        }
        cfio_rdma_addr_init(buf_addrs[i], NULL);
    }

    begin_time = times_cur();
    cfio_rdma_server_init(client_num, SERVER_REGION_SIZE, recv_bufs, 
            sizeof(cfio_buf_addr_t), (char **)buf_addrs);
    end_time = times_cur();
    // printf("server %d rdma init %f. \n", rank, end_time - begin_time);

    return CFIO_ERROR_NONE;
}