public void ParseRepeatBlock() { JSProgram program = new JSProgram(); program.AddInputBlock("k", 10); program.AddOutputDeclarationBlock("z"); string conditionalBlock = program.AddConstantBlock(3); program.AddScope("a"); program.SetScope("a"); string guardedBlock = program.AddOutputSegment("k", "z", 1, false); program.SetScope(JSProgram.DEFAULT_SCOPE_NAME); program.AddRepeatSegment(conditionalBlock, guardedBlock); program.Finish(); TestTools.ExecuteJS(program); string xml = TestTools.GetWorkspaceString(); (CDFG cdfg, var _) = XmlParser.Parse(xml); Assert.AreEqual(2, cdfg.Nodes.Count); DFG <Block> firstDFG = cdfg.StartDFG; Assert.AreEqual(5, firstDFG.Nodes.Count); (var _, DFG <Block> lastDFG) = cdfg.Nodes.Where(x => x.dfg != firstDFG).Single(); Assert.AreEqual(1, lastDFG.Nodes.Count); }
public void ScheduleOneSeqMixer(bool enableGC, bool enableOptimizations) { JSProgram program = new JSProgram(); program.AddInputBlock("a", 10); program.AddInputBlock("b", 10); program.AddMixerSegment("c", "a", 1, false, "b", 1, false); program.Finish(); (string, int)[] leftoverFluids = new (string, int)[]
public void ParseConstantBlock() { JSProgram program = new JSProgram(); program.AddConstantBlock(210); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); Constant constant = (Constant)XmlParser.ParseBlock(node, null, parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual(210, constant.Value); }
public void ParseHeaterDeclarationBlock() { JSProgram program = new JSProgram(); program.AddHeaterDeclarationBlock("z"); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); HeaterDeclaration heater = (HeaterDeclaration)XmlParser.ParseBlock(node, null, parserInfo, true); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); }
public void ParseFluidBlock() { JSProgram program = new JSProgram(); program.AddFluidSegment("k", "a", 10, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); Fluid input = (Fluid)XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); }
public void ParseBoolOPBlock() { JSProgram program = new JSProgram(); string a = program.AddConstantBlock(20); string b = program.AddConstantBlock(12); program.AddBoolOPBlock(BoolOPTypes.EQ, a, b); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); BoolOP boolOP = (BoolOP)XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual(BoolOPTypes.EQ, boolOP.OPType); }
public void ParseRandomDFG() { Random random = new Random(1280); for (int i = 0; i < 30; i++) { JSProgram program = new JSProgram(); program.Render = false; program.CreateRandomDFG(30, random); TestTools.ExecuteJS(program); string xml = TestTools.GetWorkspaceString(); XmlParser.Parse(xml); TestTools.ClearWorkspace(); } }
public void ParseInputBlock() { JSProgram program = new JSProgram(); program.AddInputBlock("a", 20); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); InputDeclaration input = (InputDeclaration)XmlParser.ParseBlock(node, null, parserInfo, true); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", input.OutputVariable); Assert.AreEqual(20, input.Amount); }
public void ParseWasteBlock() { JSProgram program = new JSProgram(); program.AddWasteSegment("a", "z", 1249, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); parserInfo.AddVariable("", VariableType.WASTE, "z"); Block input = XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.IsTrue(input is WasteUsage); }
public void ParseMixerBlock() { JSProgram program = new JSProgram(); program.AddMixerSegment("a", "b", 10, false, "c", 0, true); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); parserInfo.AddVariable("", VariableType.FLUID, "b"); parserInfo.AddVariable("", VariableType.FLUID, "c"); Mixer mixer = (Mixer)XmlParser.ParseBlock(node, null, parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", mixer.OutputVariable); }
public void ParseHeaterBlock() { JSProgram program = new JSProgram(); program.AddHeaterSegment("a", "z", 173, 39, "b", 29, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "b"); parserInfo.AddVariable("", VariableType.HEATER, "z"); HeaterUsage heater = (HeaterUsage)XmlParser.ParseBlock(node, null, parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", heater.OutputVariable); Assert.AreEqual(173, heater.Temperature); Assert.AreEqual(39, heater.Time); }
static void Main(string[] args) { if (!Directory.Exists("unoptimizedPrograms")) { Directory.CreateDirectory("unoptimizedPrograms"); } List <perf_data> unoptimizedDatas = new List <perf_data>(); List <perf_data> optimizedDatas = new List <perf_data>(); List <perf_data> optimizedNoGCDatas = new List <perf_data>(); int nameID = 0; Random random = new Random(15231); TestTools tools = new TestTools(); for (int i = 0; i < 2000; i++) { try { perf_data unoptimizedData = new perf_data(); perf_data optimizedData = new perf_data(); perf_data optimizedNoGCData = new perf_data(); JSProgram program = new JSProgram(); program.Render = false; tools.ClearWorkspace(); program.CreateCDFG(3, 15, random); tools.ExecuteJS(program); string xml = tools.GetWorkspaceString(); var result = XmlParser.Parse(xml); if (result.Item2.Count > 0) { i--; continue; } int testCount = 5; float[] untimes = new float[testCount]; float[] optimes = new float[testCount]; Stopwatch watch = new Stopwatch(); for (int z = 0; z < testCount; z++) { watch.Reset(); watch.Start(); TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = false; programExecutor.EnableGarbageCollection = false; programExecutor.Run(100, 100, result.Item1, false); unoptimizedData.makespan = commandExecutor.ticks; watch.Stop(); untimes[z] = watch.ElapsedMilliseconds / (float)testCount; } { int minSize = 10; while (true) { try { result.Item1.Nodes.ForEach(x => x.dfg.Nodes.ForEach(qq => qq.value.Reset())); TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = false; programExecutor.EnableGarbageCollection = false; programExecutor.Run(minSize, minSize, result.Item1, false); break; } catch (Exception e) { if (minSize > 100) { Console.Write(e.Message + Environment.NewLine + e.StackTrace); } minSize++; } } unoptimizedData.size = minSize; } for (int z = 0; z < testCount; z++) { watch.Reset(); watch.Start(); TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = true; programExecutor.EnableGarbageCollection = true; programExecutor.Run(100, 100, result.Item1, false); optimizedData.makespan = commandExecutor.ticks; watch.Stop(); optimes[z] = watch.ElapsedMilliseconds / (float)testCount; } { int minSize = 10; while (true) { try { result.Item1.Nodes.ForEach(x => x.dfg.Nodes.ForEach(qq => qq.value.Reset())); TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = true; programExecutor.EnableGarbageCollection = true; programExecutor.Run(minSize, minSize, result.Item1, false); break; } catch (Exception) { minSize++; } } optimizedData.size = minSize; } { TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = true; programExecutor.EnableGarbageCollection = false; programExecutor.Run(100, 100, result.Item1, false); optimizedNoGCData.makespan = commandExecutor.ticks; } { int minSize = 10; while (true) { try { result.Item1.Nodes.ForEach(x => x.dfg.Nodes.ForEach(qq => qq.value.Reset())); TestCommandExecutor commandExecutor = new TestCommandExecutor(); ProgramExecutor <string> programExecutor = new ProgramExecutor <string>(commandExecutor); programExecutor.TimeBetweenCommands = 0; programExecutor.EnableOptimizations = true; programExecutor.EnableGarbageCollection = false; programExecutor.Run(minSize, minSize, result.Item1, false); break; } catch (Exception) { minSize++; } } optimizedNoGCData.size = minSize; } unoptimizedData.time = untimes.Min(); optimizedData.time = optimes.Min(); unoptimizedDatas.Add(unoptimizedData); optimizedDatas.Add(optimizedData); optimizedNoGCDatas.Add(optimizedNoGCData); string path = Path.Combine("unoptimizedPrograms", $"program_{nameID++}.bc"); File.WriteAllText(path, xml); } catch (Exception e) { //Console.Write(e.Message + Environment.NewLine + e.StackTrace); i--; } Console.WriteLine(i); } tools.AssemblyCleanup(); File.WriteAllText("unoptimized_data.txt", String.Join(Environment.NewLine, unoptimizedDatas.Select(x => x.makespan + " " + x.time.ToString(CultureInfo.InvariantCulture) + " " + x.size))); File.WriteAllText("optimized_data.txt", String.Join(Environment.NewLine, optimizedDatas.Select(x => x.makespan + " " + x.time.ToString(CultureInfo.InvariantCulture) + " " + x.size))); File.WriteAllText("optimized_no_gc_data.txt", String.Join(Environment.NewLine, optimizedNoGCDatas.Select(x => x.makespan + " " + x.size))); }