def test_considers_number_of_clients_per_subtask(self): op1 = track.Operation("index-a", track.OperationType.Index) op2 = track.Operation("index-b", track.OperationType.Index) op3 = track.Operation("index-c", track.OperationType.Index) index_a = track.Task(op1) index_b = track.Task(op2) index_c = track.Task(op3, clients=2) allocator = driver.Allocator( [track.Parallel(tasks=[index_a, index_b, index_c], clients=3)]) self.assertEqual(3, allocator.clients) allocations = allocator.allocations self.assertEqual(3, len(allocations)) # join_point, index_a, index_c, join_point self.assertEqual(4, len(allocations[0])) # we really have no chance to extract the join point so we just take what is there... self.assertEqual( [allocations[0][0], index_a, index_c, allocations[0][3]], allocations[0]) # join_point, index_b, None, join_point self.assertEqual(4, len(allocator.allocations[1])) self.assertEqual([allocations[1][0], index_b, None, allocations[1][3]], allocations[1]) self.assertEqual(4, len(allocator.allocations[2])) self.assertEqual([allocations[2][0], index_c, None, allocations[2][3]], allocations[2]) self.assertEqual([{op1, op2, op3}], allocator.operations_per_joinpoint)
def test_allocates_one_task(self): op = track.Operation("index", track.OperationType.Index) task = track.Task(op) allocator = driver.Allocator([task]) self.assertEqual(1, allocator.clients) self.assertEqual(3, len(allocator.allocations[0])) self.assertEqual(2, len(allocator.join_points)) self.assertEqual([{op}], allocator.operations_per_joinpoint)
def test_allocates_two_serial_tasks(self): op = track.Operation("index", track.OperationType.Index) task = track.Task(op) allocator = driver.Allocator([task, task]) self.assertEqual(1, allocator.clients) # we have two operations and three join points self.assertEqual(5, len(allocator.allocations[0])) self.assertEqual(3, len(allocator.join_points)) self.assertEqual([{op}, {op}], allocator.operations_per_joinpoint)
def test_allocates_more_tasks_than_clients(self): op1 = track.Operation("index-a", track.OperationType.Index) op2 = track.Operation("index-b", track.OperationType.Index) op3 = track.Operation("index-c", track.OperationType.Index) op4 = track.Operation("index-d", track.OperationType.Index) op5 = track.Operation("index-e", track.OperationType.Index) index_a = track.Task(op1) index_b = track.Task(op2) index_c = track.Task(op3) index_d = track.Task(op4) index_e = track.Task(op5) allocator = driver.Allocator([ track.Parallel(tasks=[index_a, index_b, index_c, index_d, index_e], clients=2) ]) self.assertEqual(2, allocator.clients) allocations = allocator.allocations self.assertEqual(2, len(allocations)) # join_point, index_a, index_c, index_e, join_point self.assertEqual(5, len(allocations[0])) # we really have no chance to extract the join point so we just take what is there... self.assertEqual( [allocations[0][0], index_a, index_c, index_e, allocations[0][4]], allocations[0]) # join_point, index_a, index_c, None, join_point self.assertEqual(5, len(allocator.allocations[1])) self.assertEqual( [allocations[1][0], index_b, index_d, None, allocations[1][4]], allocations[1]) self.assertEqual([{op1, op2, op3, op4, op5}], allocator.operations_per_joinpoint)
def test_allocates_mixed_tasks(self): op1 = track.Operation("index", track.OperationType.Index) op2 = track.Operation("stats", track.OperationType.IndicesStats) op3 = track.Operation("search", track.OperationType.Search) index = track.Task(op1) stats = track.Task(op2) search = track.Task(op3) allocator = driver.Allocator([ index, track.Parallel([index, stats, stats]), index, index, track.Parallel([search, search, search]) ]) self.assertEqual(3, allocator.clients) # 1 join point, 1 op, 1 jp, 1 (parallel) op, 1 jp, 1 op, 1 jp, 1 op, 1 jp, 1 (parallel) op, 1 jp self.assertEqual(11, len(allocator.allocations[0])) self.assertEqual(11, len(allocator.allocations[1])) self.assertEqual(11, len(allocator.allocations[2])) self.assertEqual(6, len(allocator.join_points)) self.assertEqual([{op1}, {op1, op2}, {op1}, {op1}, {op3}], allocator.operations_per_joinpoint)