def start(self): log.info("Worker started on processor %d %s" % (rank, name)) # First we send all the required partitions to the neighbors and then # receive all the segments and reconstruct a local matrix where the # function will be evaluated. puzzle = Puzzle(self.partition) for lbl, enum in zip(LABELS, ORDERED): self.comm.send(getattr(self.conns, lbl), enum) for lbl, enum in zip(RLABELS, REVERSED): m = self.comm.receive(getattr(self.conns, lbl), enum) if m: puzzle.add_piece(m, enum) start = time.time() puzzle.apply(self.offsets, function) log.info("Worker %d: %.10f seconds to compute the partition" % \ (rank - 1, time.time() - start)) log.info("Sending back the computed sub-partition from %d" % rank) start = time.time() comm.gather(self.partition.matrix, root=0) log.info("Worker %d: %.10f seconds to send back the partition" % \ (rank - 1, time.time() - start)) comm.Barrier()