Esempio n. 1
0
 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()
Esempio n. 2
0
 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()
Esempio n. 3
0
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
Esempio n. 4
0
 def testConstructor(self):
     op = MPI.Op()
     self.assertFalse(op)
     self.assertEqual(op, MPI.OP_NULL)