Network.cc (6493:1fa51760a963) Network.cc (6700:deb871e1fc27)
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
1
2#include "mem/protocol/MachineType.hh"
3#include "mem/ruby/network/Network.hh"
4
5Network::Network(const string & name)
6 : m_name(name)
7{
8 m_virtual_networks = 0;
9 m_topology_ptr = NULL;
10}
11
12void Network::init(const vector<string> & argv)
13{
14 m_nodes = MachineType_base_number(MachineType_NUM); // Total nodes in network
15
16 for (size_t i=0; i<argv.size(); i+=2) {
17 if (argv[i] == "number_of_virtual_networks")
18 m_virtual_networks = atoi(argv[i+1].c_str());
19 else if (argv[i] == "topology")
20 m_topology_ptr = RubySystem::getTopology(argv[i+1]);
21 else if (argv[i] == "buffer_size")
22 m_buffer_size = atoi(argv[i+1].c_str());
23 else if (argv[i] == "endpoint_bandwidth")
24 m_endpoint_bandwidth = atoi(argv[i+1].c_str());
25 else if (argv[i] == "adaptive_routing")
26 m_adaptive_routing = (argv[i+1]=="true");
27 else if (argv[i] == "link_latency")
28 m_link_latency = atoi(argv[i+1].c_str());
29 else if (argv[i] == "control_msg_size")
30 m_control_msg_size = atoi(argv[i+1].c_str());
31 }
32
33 m_data_msg_size = RubySystem::getBlockSizeBytes() + m_control_msg_size;
34
35 assert(m_virtual_networks != 0);
36 assert(m_topology_ptr != NULL);
37}
38
39int Network::MessageSizeType_to_int(MessageSizeType size_type)
40{
41 switch(size_type) {
42 case MessageSizeType_Undefined:
43 ERROR_MSG("Can't convert Undefined MessageSizeType to integer");
44 break;
45 case MessageSizeType_Control:
46 case MessageSizeType_Request_Control:
47 case MessageSizeType_Reissue_Control:
48 case MessageSizeType_Response_Control:
49 case MessageSizeType_Writeback_Control:
50 case MessageSizeType_Forwarded_Control:
51 case MessageSizeType_Invalidate_Control:
52 case MessageSizeType_Unblock_Control:
53 case MessageSizeType_Persistent_Control:
54 case MessageSizeType_Completion_Control:
55 return m_control_msg_size;
56 break;
57 case MessageSizeType_Data:
58 case MessageSizeType_Response_Data:
59 case MessageSizeType_ResponseLocal_Data:
60 case MessageSizeType_ResponseL2hit_Data:
61 case MessageSizeType_Writeback_Data:
62 return m_data_msg_size;
63 break;
64 default:
65 ERROR_MSG("Invalid range for type MessageSizeType");
66 break;
67 }
68 return 0;
69}
28
29#include "mem/protocol/MachineType.hh"
30#include "mem/ruby/network/Network.hh"
31
32Network::Network(const string & name)
33 : m_name(name)
34{
35 m_virtual_networks = 0;
36 m_topology_ptr = NULL;
37}
38
39void Network::init(const vector<string> & argv)
40{
41 m_nodes = MachineType_base_number(MachineType_NUM); // Total nodes in network
42
43 for (size_t i=0; i<argv.size(); i+=2) {
44 if (argv[i] == "number_of_virtual_networks")
45 m_virtual_networks = atoi(argv[i+1].c_str());
46 else if (argv[i] == "topology")
47 m_topology_ptr = RubySystem::getTopology(argv[i+1]);
48 else if (argv[i] == "buffer_size")
49 m_buffer_size = atoi(argv[i+1].c_str());
50 else if (argv[i] == "endpoint_bandwidth")
51 m_endpoint_bandwidth = atoi(argv[i+1].c_str());
52 else if (argv[i] == "adaptive_routing")
53 m_adaptive_routing = (argv[i+1]=="true");
54 else if (argv[i] == "link_latency")
55 m_link_latency = atoi(argv[i+1].c_str());
56 else if (argv[i] == "control_msg_size")
57 m_control_msg_size = atoi(argv[i+1].c_str());
58 }
59
60 m_data_msg_size = RubySystem::getBlockSizeBytes() + m_control_msg_size;
61
62 assert(m_virtual_networks != 0);
63 assert(m_topology_ptr != NULL);
64}
65
66int Network::MessageSizeType_to_int(MessageSizeType size_type)
67{
68 switch(size_type) {
69 case MessageSizeType_Undefined:
70 ERROR_MSG("Can't convert Undefined MessageSizeType to integer");
71 break;
72 case MessageSizeType_Control:
73 case MessageSizeType_Request_Control:
74 case MessageSizeType_Reissue_Control:
75 case MessageSizeType_Response_Control:
76 case MessageSizeType_Writeback_Control:
77 case MessageSizeType_Forwarded_Control:
78 case MessageSizeType_Invalidate_Control:
79 case MessageSizeType_Unblock_Control:
80 case MessageSizeType_Persistent_Control:
81 case MessageSizeType_Completion_Control:
82 return m_control_msg_size;
83 break;
84 case MessageSizeType_Data:
85 case MessageSizeType_Response_Data:
86 case MessageSizeType_ResponseLocal_Data:
87 case MessageSizeType_ResponseL2hit_Data:
88 case MessageSizeType_Writeback_Data:
89 return m_data_msg_size;
90 break;
91 default:
92 ERROR_MSG("Invalid range for type MessageSizeType");
93 break;
94 }
95 return 0;
96}