def test_pipeline(): prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() graph = WorkflowGraph() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') process(graph, {prod: [{}, {}, {}]})
def testTee(): graph = WorkflowGraph() prod = t.TestProducer() prev = prod cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() graph.connect(prod, 'output', cons1, 'input') graph.connect(prod, 'output', cons2, 'input') args.num = 3 process(graph, inputs={prod: [{}, {}, {}, {}, {}]}, args=args)
def testPipeline(): prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() graph = WorkflowGraph() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') results = simple_process.process_and_return( graph, inputs={prod: [{}, {}, {}, {}, {}]}) assert {cons2.id: {'output': [1, 2, 3, 4, 5]}} == results
def testPipeline(): prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() graph = WorkflowGraph() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') args = argparse.Namespace args.num = 5 args.simple = False process(graph, inputs={prod: [{}, {}, {}]}, args=args)
def testSquare(): graph = WorkflowGraph() prod = t.TestProducer(2) cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() last = t.TestTwoInOneOut() graph.connect(prod, 'output0', cons1, 'input') graph.connect(prod, 'output1', cons2, 'input') graph.connect(cons1, 'output', last, 'input0') graph.connect(cons2, 'output', last, 'input1') args.num = 4 process(graph, inputs={prod: [{}]}, args=args)
def testSquare(): graph = WorkflowGraph() prod = t.TestProducer(2) cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() last = t.TestTwoInOneOut() graph.connect(prod, 'output0', cons1, 'input') graph.connect(prod, 'output1', cons2, 'input') graph.connect(cons1, 'output', last, 'input0') graph.connect(cons2, 'output', last, 'input1') results = simple_process.process_and_return(graph, {prod: [{}]}) assert {last.id: {'output': ['1', '1']}} == results
def testAlltoOne(): graph = WorkflowGraph() prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons1.numprocesses = 5 cons2.numprocesses = 5 graph.connect(prod, 'output', cons1, 'input') cons2.inputconnections['input']['grouping'] = 'global' graph.connect(cons1, 'output', cons2, 'input') return graph
def testTee(): ''' Creates a graph with two consumer nodes and a tee connection. :rtype: the created graph ''' graph = WorkflowGraph() prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() graph.connect(prod, 'output', cons1, 'input') graph.connect(prod, 'output', cons2, 'input') return graph
def testGrouping(): words = t.RandomWordProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons3 = t.TestOneInOneOut() count = t.WordCounter() graph = WorkflowGraph() graph.connect(words, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') graph.connect(cons2, 'output', cons3, 'input') graph.connect(cons3, 'output', count, 'input') graph.partitions = [[words], [cons1, cons2, cons3], [count]] return graph
def testAlltoOne(): ''' Creates a graph with two consumer nodes and a global grouping. :rtype: the created graph ''' graph = WorkflowGraph() prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons1.numprocesses=5 cons2.numprocesses=5 graph.connect(prod, 'output', cons1, 'input') cons2.inputconnections['input']['grouping'] = 'global' graph.connect(cons1, 'output', cons2, 'input') return graph
def testParallelPipeline(): ''' Creates a graph with 4 nodes. :rtype: the created graph ''' graph = WorkflowGraph() prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons3 = t.TestOneInOneOut() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') graph.connect(cons1, 'output', cons3, 'input') return graph
def testOnetoAll(): graph = WorkflowGraph() prod = t.TestProducer() cons = t.TestOneInOneOut() cons.numprocesses = 2 cons.inputconnections['input']['grouping'] = 'all' graph.connect(prod, 'output', cons, 'input') return graph
def testParallelPipeline(): ''' Creates the parallel pipeline graph with partitioning information. :rtype: the created graph ''' graph = WorkflowGraph() prod = t.TestProducer() cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons3 = t.TestOneInOneOut() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') graph.connect(cons1, 'output', cons3, 'input') graph.partitions = [[prod, cons1, cons2], [cons3]] return graph
def testTee(): ''' Creates a graph with two consumer nodes and a tee connection. :rtype: the created graph ''' graph = WorkflowGraph() try: numIterations = int(sys.argv[4]) except: numIterations = 1 prod = t.NumberProducer(numIterations) cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOut() cons3 = t.TestOneInOneOut() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input') graph.connect(cons1, 'output', cons3, 'input') return graph
def testPipeline(graph): ''' Adds a pipeline to the given graph. :rtype: the created graph ''' prod = t.TestProducer() prev = prod for i in range(5): cons = t.TestOneInOneOut() graph.connect(prev, 'output', cons, 'input') prev = cons return graph
def testPipeline(graph): ''' Creates a pipeline and adds it to the given graph. :rtype: the modified graph ''' prod = t.TestProducer() prev = prod part1 = [prod] part2 = [] for i in range(5): cons = t.TestOneInOneOut() part2.append(cons) graph.connect(prev, 'output', cons, 'input') prev = cons return graph
def testSplitMerge(): ''' Creates the split/merge graph with 4 nodes. :rtype: the created graph ''' graph = WorkflowGraph() prod = t.TestProducer(2) cons1 = t.TestOneInOneOut() cons2 = t.TestOneInOneOutWriter() last = t.TestTwoInOneOut() graph.connect(prod, 'output0', cons1, 'input') graph.connect(prod, 'output1', cons2, 'input') graph.connect(cons1, 'output', last, 'input0') graph.connect(cons2, 'output', last, 'input1') return graph
Each node in the graph is executed as a separate MPI process. This graph has 3 nodes. For this reason we need at least 3 MPI processes to execute it. Output:: Processes: {'TestDelayOneInOneOut2': [2, 3], 'TestProducer0': [4], \ 'TestOneInOneOut1': [0, 1]} TestProducer0 (rank 4): Processed 10 iterations. TestOneInOneOut1 (rank 1): Processed 5 iterations. TestOneInOneOut1 (rank 0): Processed 5 iterations. TestDelayOneInOneOut2 (rank 3): Average processing time: 1.00058307648 TestDelayOneInOneOut2 (rank 3): Processed 5 iterations. TestDelayOneInOneOut2 (rank 2): Average processing time: 1.00079641342 TestDelayOneInOneOut2 (rank 2): Processed 5 iterations. ''' from dispel4py.examples.graph_testing import testing_PEs as t from dispel4py.workflow_graph import WorkflowGraph from dispel4py.new.monitoring import ProcessTimingPE prod = t.TestProducer() cons1 = t.TestOneInOneOut() ''' adding a processing timer ''' cons2 = ProcessTimingPE(t.TestDelayOneInOneOut()) ''' important: this is the graph_variable ''' graph = WorkflowGraph() graph.connect(prod, 'output', cons1, 'input') graph.connect(cons1, 'output', cons2, 'input')