package archimulator.uncore.noc.util.visualization; import archimulator.uncore.noc.Direction; import archimulator.uncore.noc.NoCExperiment; import archimulator.uncore.noc.Node; import archimulator.uncore.noc.routers.FlitState; import org.graphstream.graph.Graph; import org.graphstream.graph.implementations.SingleGraph; import java.util.Random; public class NoCExperimentViewer { private NoCExperiment experiment; private Graph graph; static { System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); } public NoCExperimentViewer(NoCExperiment experiment) { this.experiment = experiment; this.graph = new SingleGraph("NoC Experiment"); this.graph.addAttribute("ui.stylesheet", "url('archimulator/uncore/noc/util/visualization/stylesheet.css')"); experiment.getBlockingEventDispatcher().addListener( NoCExperiment.NoCExperimentStartedEvent.class, e -> { for (Node node : experiment.getNetwork().getNodes()) { org.graphstream.graph.Node graphNode = graph.addNode(String.format("%d", node.getId())); graphNode.addAttribute("xy", node.getX(), node.getY()); graphNode.addAttribute("label", String.format("%d", node.getId())); } for(Node node : experiment.getNetwork().getNodes()) { for(Direction direction : node.getNeighbors().keySet()) { if(direction == Direction.NORTH || direction == Direction.EAST) { graph.addEdge( node.getId() + "-" + node.getNeighbors().get(direction), node.getId(), node.getNeighbors().get(direction) ); } } } this.graph.display(false); }); Random random = new Random(); experiment.getBlockingEventDispatcher().addListener( NoCExperiment.NoCExperimentAdvanceOneCycleEvent.class, e -> { for(Node node : experiment.getNetwork().getNodes()) { org.graphstream.graph.Node graphNode = graph.getNode(String.format("%d", node.getId())); double v = random.nextDouble(); v = (double) node.getRouter().getNumInflightHeadFlits().get(FlitState.INPUT_BUFFER) / experiment.getConfig().getMaxInputBufferSize(); graphNode.setAttribute("ui.color", v); try { Thread.sleep(1); } catch (InterruptedException e1) { } } }); } //TODO: displaying hotspots, ant packets and data packets distributions, pheromones distribution. public static void main(String[] args) { int numNodes = 64; int maxCycles = 20000; int maxPackets = -1; boolean noDrain = false; NoCExperiment experimentAco = new NoCExperiment( "test_results/synthetic/aco", numNodes, maxCycles, maxPackets, noDrain ); experimentAco.getConfig().setRouting("oddEven"); experimentAco.getConfig().setSelection("bufferLevel"); experimentAco.getConfig().setDataPacketTraffic("transpose"); experimentAco.getConfig().setDataPacketInjectionRate(0.06); experimentAco.getConfig().setAntPacketTraffic("uniform"); experimentAco.getConfig().setAntPacketInjectionRate(0.0002); experimentAco.getConfig().setAcoSelectionAlpha(0.45); experimentAco.getConfig().setReinforcementFactor(0.001); NoCExperimentViewer viewer = new NoCExperimentViewer(experimentAco); experimentAco.run(); } }