def testCreate(self): for comm in [MPI.COMM_SELF, MPI.COMM_WORLD]: for commute in [True, False]: for N in range(4): myop = MPI.Op.Create(mysum, commute) self.assertFalse(myop.is_predefined) try: if hasattr(sys, 'pypy_version_info'): if comm.size > 1: continue # buffer(empty_array) returns # the same non-NULL pointer !!! if N == 0: continue size = comm.Get_size() rank = comm.Get_rank() a = array.array('i', [i * (rank + 1) for i in range(N)]) b = array.array('i', [0] * len(a)) comm.Allreduce([a, MPI.INT], [b, MPI.INT], myop) scale = sum(range(1, size + 1)) for i in range(N): self.assertEqual(b[i], scale * i) ret = myop(a, b) self.assertTrue(ret is b) for i in range(N): self.assertEqual(b[i], a[i] + scale * i) myop2 = MPI.Op(myop) a = array.array('i', [1] * N) b = array.array('i', [2] * N) ret = myop2(a, b) self.assertTrue(ret is b) for i in range(N): self.assertEqual(b[i], 3) myop2 = None finally: myop.Free()
def testCreate(self): for comm in [MPI.COMM_SELF, MPI.COMM_WORLD]: for commute in [True, False]: for N in range(4): myop = MPI.Op.Create(mysum, commute) self.assertFalse(myop.is_predefined) try: size = comm.Get_size() rank = comm.Get_rank() a = array.array('i', [i * (rank + 1) for i in range(N)]) b = array.array('i', [0] * len(a)) comm.Allreduce([a, MPI.INT], [b, MPI.INT], myop) scale = sum(range(1, size + 1)) for i in range(N): self.assertEqual(b[i], scale * i) ret = myop(a, b) self.assertTrue(ret is b) for i in range(N): self.assertEqual(b[i], a[i] + scale * i) myop2 = MPI.Op(myop) a = array.array('i', [1] * N) b = array.array('i', [2] * N) ret = myop2(a, b) self.assertTrue(ret is b) for i in range(N): self.assertEqual(b[i], 3) myop2 = None finally: myop.Free()
def MPIOp_from_ptr(ptr): """ MPIOp_from_ptr(ptr) Constructs a MPI Op object from a pointer """ op = _MPI.Op() op_ptr = ctypes.c_void_p.from_address(_MPI._addressof(op)) op_ptr.value = int(ptr) return op
def testConstructor(self): op = MPI.Op() self.assertFalse(op) self.assertEqual(op, MPI.OP_NULL)