def computeRouterPowerAndArea(router, stats_file, config, int_links, ext_links, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, buffers_per_control_vc, ni_flit_size_bits): frequency = getClock(router, config) num_ports = 0 for int_link in int_links: if config.get(int_link, "node_a") == router or \ config.get(int_link, "node_b") == router: num_ports += 1 for ext_link in ext_links: if config.get(ext_link, "int_node") == router: num_ports += 1 pattern = router + ".router_utilization" lines = string.split( subprocess.check_output(["grep", pattern, stats_file]), '\n', -1) assert len(lines) >= 1 ## Assume that the first line is the one required [l1, l2, l3] = lines[0].partition(" ") l4 = l3.strip().partition(" ") router_utilization = float(l4[0]) print("%s.router_utilization: %.6f" % (router, router_utilization)) print("%s Power: " % router) power = dsent.computeRouterPowerAndArea(frequency, router_utilization, num_ports, num_ports, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, ni_flit_size_bits)
def computeRouterPowerAndArea( router, stats_file, config, number_of_virtual_networks, vcs_per_vnet, buffers_per_vc, attached_router_id, flit_size_bits, inj_rate): cycle_time_in_ps = getClock("system.ruby.clk_domain", config) frequency = 1000000000000 / cycle_time_in_ps num_ports = 4 # consider mesh for r in attached_router_id: if r == router: num_ports += 1 power = dsent.computeRouterPowerAndArea( frequency, num_ports, num_ports, number_of_virtual_networks, vcs_per_vnet, buffers_per_vc, flit_size_bits, inj_rate) #print("router#" + str(router) + " Power: ", power) return power
def computeRouterPowerAndArea( router, stats_file, config, int_links, ext_links, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, buffers_per_control_vc, ni_flit_size_bits, ): frequency = getClock(router, config) num_ports = 0 for int_link in int_links: if config.get(int_link, "node_a") == router or config.get(int_link, "node_b") == router: num_ports += 1 for ext_link in ext_links: if config.get(ext_link, "int_node") == router: num_ports += 1 pattern = router + ".router_utilization" lines = string.split(subprocess.check_output(["grep", pattern, stats_file]), "\n", -1) assert len(lines) >= 1 ## Assume that the first line is the one required [l1, l2, l3] = lines[0].partition(" ") l4 = l3.strip().partition(" ") router_utilization = float(l4[0]) print("%s.router_utilization: %.6f" % (router, router_utilization)) print("%s Power: " % router) power = dsent.computeRouterPowerAndArea( frequency, router_utilization, num_ports, num_ports, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, ni_flit_size_bits, )
def computeRouterPowerAndArea(router, stats_file, config, int_links, ext_links, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, buffers_per_control_vc, ni_flit_size_bits): frequency = getClock(router, config) num_ports = 0 for int_link in int_links: if config.get(int_link, "node_a") == router or \ config.get(int_link, "node_b") == router: num_ports += 1 for ext_link in ext_links: if config.get(ext_link, "int_node") == router: num_ports += 1 power = dsent.computeRouterPowerAndArea(frequency, num_ports, num_ports, number_of_virtual_networks, vcs_per_vnet, buffers_per_data_vc, ni_flit_size_bits) print("%s Power: " % router, power)