fifo_scheduler::fifo_scheduler(size_t num_vertices, const graphlab_options& opts): multi(3), num_vertices(num_vertices) { ASSERT_GE(opts.get_ncpus(), 1); set_options(opts); initialize_data_structures(); }
priority_scheduler::priority_scheduler(size_t num_vertices, const graphlab_options& opts): multi(3), min_priority(-std::numeric_limits<double>::max()), num_vertices(num_vertices) { ASSERT_GE(opts.get_ncpus(), 1); set_options(opts); initialize_data_structures(); }
queued_fifo_scheduler::queued_fifo_scheduler(size_t num_vertices, const graphlab_options& opts) : ncpus(opts.get_ncpus()), num_vertices(num_vertices), multi(3), sub_queue_size(100) { ASSERT_GE(opts.get_ncpus(), 1); set_options(opts); initialize_data_structures(); }
int main() { struct heap_t min; initialize_data_structures(3); do_dijkstra(3); print_fin_array(weights, NUM_VERTICES); return 0; }
queued_fifo_scheduler::queued_fifo_scheduler(size_t num_vertices, const graphlab_options& opts) : ncpus(opts.get_ncpus()), num_vertices(num_vertices), multi(3), sub_queue_size(100) { ASSERT_GE(opts.get_ncpus(), 1); set_options(opts); initialize_data_structures(); logstream(LOG_INFO) << "Queued-FIFO Scheduler:" << " queuesize=" << sub_queue_size << " multi=" << multi << std::endl; }
int RDMAServer::start_server (int server_num) { tcp_port = TCP_PORT[server_num]; ib_port = IB_PORT[server_num]; RDMAServerContext ctx[CLIENTS_CNT]; char temp_char; TEST_NZ(initialize_data_structures()); std::cout << "[Info] Server " << server_num << " is waiting for " << CLIENTS_CNT << " client(s) on tcp port: " << tcp_port << ", ib port: " << ib_port << std::endl; server_sockfd = -1; struct sockaddr_in serv_addr, cli_addr; socklen_t clilen = sizeof(cli_addr); pthread_t master_threads[CLIENTS_CNT]; // Open Socket server_sockfd = socket (AF_INET, SOCK_STREAM, 0); if (server_sockfd < 0) { std::cerr << "Error opening socket" << std::endl; return -1; } // Bind memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(tcp_port); TEST_NZ(bind(server_sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))); // listen TEST_NZ(listen (server_sockfd, CLIENTS_CNT)); // accept connections for (int i = 0; i < CLIENTS_CNT; i++){ initialize_context(ctx[i]); ctx[i].sockfd = accept (server_sockfd, (struct sockaddr *) &cli_addr, &clilen); if (ctx[i].sockfd < 0){ std::cerr << "ERROR on accept" << std::endl; return -1; } std::cout << "[Conn] Received client #" << i << " on socket " << ctx[i].sockfd << std::endl; // pthread_create(&master_threads[i], NULL, RDMAServer::handle_client, &client_socks[i]); // create all resources TEST_NZ (ctx[i].create_context()); DEBUG_COUT("[Info] Context for client " << i << " created"); // connect the QPs TEST_NZ (RDMACommon::connect_qp (&(ctx[i].qp), ctx[i].ib_port, ctx[i].port_attr.lid, ctx[i].sockfd)); DEBUG_COUT("[Conn] QPed to client " << i); // prepare server buffer with read message memcpy(&(ctx[i].send_msg.mr_items), ctx[i].mr_items, sizeof(struct ibv_mr)); memcpy(&(ctx[i].send_msg.mr_orders), ctx[i].mr_orders, sizeof(struct ibv_mr)); memcpy(&(ctx[i].send_msg.mr_order_line),ctx[i].mr_order_line, sizeof(struct ibv_mr)); memcpy(&(ctx[i].send_msg.mr_cc_xacts), ctx[i].mr_cc_xacts, sizeof(struct ibv_mr)); memcpy(&(ctx[i].send_msg.mr_timestamp), ctx[i].mr_timestamp, sizeof(struct ibv_mr)); memcpy(&(ctx[i].send_msg.mr_lock_items),ctx[i].mr_lock_items, sizeof(struct ibv_mr)); } for (int i = 0; i < CLIENTS_CNT; i++){ // send memory locations using SEND TEST_NZ (RDMACommon::post_SEND (ctx[i].qp, ctx[i].send_mr, (uintptr_t)&ctx[i].send_msg, sizeof(struct MemoryKeys), true)); TEST_NZ (RDMACommon::poll_completion(ctx[i].cq)); DEBUG_COUT("[Sent] buffer info to client " << i); } /* Server waits for the client to muck with its memory */ for (int i = 0; i < CLIENTS_CNT; i++) { TEST_NZ (sock_sync_data (ctx[i].sockfd, 1, "W", &temp_char)); /* just send a dummy char back and forth */ DEBUG_COUT("[Conn] Client " << i << " notified it's finished"); TEST_NZ (ctx[i].destroy_context()); std::cout << "[Info] Destroying client " << i << " resources" << std::endl; } std::cout << "[Info] Server's ready to gracefully get destroyed" << std::endl; }
int DQClientCentricServer::start_server () { tcp_port = SERVER_TCP_PORT; ib_port = SERVER_IB_PORT; DQServerContext ctx[CLIENTS_CNT]; struct sockaddr_in serv_addr, cli_addr; socklen_t clilen = sizeof(cli_addr); char temp_char; std::string clients_addresses; // separated by the delimiter '|' std::string clients_tcp_port; // separated by the delimiter '|' TEST_NZ(initialize_data_structures()); std::cout << "[Info] Server is waiting for " << CLIENTS_CNT << " client(s) on tcp port: " << tcp_port << ", ib port: " << ib_port << std::endl; // Open Socket server_sockfd = socket (AF_INET, SOCK_STREAM, 0); if (server_sockfd < 0) { std::cerr << "Error opening socket" << std::endl; return -1; } // Bind memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(tcp_port); TEST_NZ(bind(server_sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))); // listen TEST_NZ(listen (server_sockfd, CLIENTS_CNT)); // accept connections for (int i = 0; i < CLIENTS_CNT; i++){ initialize_context(ctx[i]); ctx[i].sockfd = accept (server_sockfd, (struct sockaddr *) &cli_addr, &clilen); if (ctx[i].sockfd < 0){ std::cerr << "ERROR on accept" << std::endl; return -1; } std::cout << "[Conn] Received client #" << i << " on socket " << ctx[i].sockfd << std::endl; ctx[i].client_ip = ""; ctx[i].client_ip += std::string(inet_ntoa (cli_addr.sin_addr)); clients_addresses.append(ctx[i].client_ip); clients_tcp_port.append(std::to_string(8000 + i)); // if the client is not the last client, add the delimiter if (i != CLIENTS_CNT - 1){ clients_addresses.append("|"); clients_tcp_port.append("|"); } // create all resources TEST_NZ (ctx[i].create_context()); DEBUG_COUT("[Info] Context for client " << i << " (" << ctx[i].client_ip << ") created"); // connect the QPs TEST_NZ (RDMACommon::connect_qp (&(ctx[i].qp), ctx[i].ib_port, ctx[i].port_attr.lid, ctx[i].sockfd)); DEBUG_COUT("[Conn] QPed to client " << i); } for (int i = 0; i < CLIENTS_CNT; i++){ // send memory locations using SEND memcpy(&(ctx[i].send_message_msg.peer_mr), ctx[i].locks_mr, sizeof(struct ibv_mr)); ctx[i].send_message_msg.client_id = static_cast<uint32_t>(i + 1); strcpy(ctx[i].send_message_msg.clients_addr, clients_addresses.c_str()); strcpy(ctx[i].send_message_msg.clients_tcp_port, clients_tcp_port.c_str()); DEBUG_COUT("[Sent] Cheeck: " << ctx[i].send_message_msg.clients_addr); TEST_NZ (RDMACommon::post_SEND (ctx[i].qp, ctx[i].send_message_mr, (uintptr_t)&ctx[i].send_message_msg, sizeof (struct MemoryKeys), true)); TEST_NZ (RDMACommon::poll_completion(ctx[i].cq)); DEBUG_COUT("[Sent] buffer info to client " << i); } // Server waits for the client to muck with its memory /*************** THIS IS FOR SEND // accept connections for (int i = 0; i < CLIENTS_CNT; i++){ initialize_context(ctx[i]); ctx[i].sockfd = accept (server_sockfd, (struct sockaddr *) &cli_addr, &clilen); if (ctx[i].sockfd < 0){ std::cerr << "ERROR on accept" << std::endl; return -1; } std::cout << "[Conn] Received client #" << i << " on socket " << ctx[i].sockfd << std::endl; // create all resources TEST_NZ (ctx[i].create_context()); DEBUG_COUT("[Info] Context for client " << i << " created"); // connect the QPs TEST_NZ (RDMACommon::connect_qp (&(ctx[i].qp), ctx[i].ib_port, ctx[i].port_attr.lid, ctx[i].sockfd)); DEBUG_COUT("[Conn] QPed to client " << i); pthread_create(&master_threads[i], NULL, BenchmarkServer::handle_client, &ctx[i]); } std::cout << "[Info] Established connection to all " << CLIENTS_CNT << " client(s)." << std::endl; //wait for handlers to finish for (int i = 0; i < CLIENTS_CNT; i++) { pthread_join(master_threads[i], NULL); } */ for (int i = 0; i < CLIENTS_CNT; i++) { TEST_NZ (sock_sync_data (ctx[i].sockfd, 1, "W", &temp_char)); // just send a dummy char back and forth DEBUG_COUT("[Conn] Client " << i << " notified it's finished"); TEST_NZ (ctx[i].destroy_context()); std::cout << "[Info] Destroying client " << i << " resources" << std::endl; } std::cout << "[Info] Server's ready to gracefully get destroyed" << std::endl; }