int cfio_send_io_done() { #ifdef SEND_ADDR if (!cfio_rdma_addr_client_test(&addr)) { cfio_rdma_client_recv_ack(); cfio_rdma_client_wait(NULL); } #endif cfio_rdma_addr_client_wait(&addr); cfio_rdma_addr_client_end_signal(&addr); #ifdef DEBUG_ADDR cfio_rdma_addr_client_show(rank, -1, &addr, itr); #endif #ifdef SEND_ADDR cfio_rdma_client_send_addr(); #else cfio_rdma_client_write_addr(); #endif #ifdef TRANSFER_ADDR_TIME double min_time, max_time, avg_time, temp_time; min_time = max_time = avg_time = transfer_addr_time; if (0 == rank) { int client_amt = cfio_map_get_client_amount(); int i; MPI_Status sta; for (i = 1; i < client_amt; ++i) { MPI_Recv(&temp_time, 1, MPI_DOUBLE, i, i, MPI_COMM_WORLD, &sta); min_time = (min_time > temp_time)? temp_time: min_time; max_time = (max_time < temp_time)? temp_time: max_time; avg_time += temp_time; } avg_time /= client_amt; printf("client transfer addr: min_time %f, max_time %f, avg_time %f. \n", min_time, max_time, avg_time); } else { MPI_Send(&transfer_addr_time, 1, MPI_DOUBLE, 0, rank, MPI_COMM_WORLD); } #endif ++itr; return CFIO_ERROR_NONE; }
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; }