Esempio n. 1
0
 def testNeighborAlltoallwBottom(self):
     size = self.COMM.Get_size()
     for comm in create_topo_comms(self.COMM):
         rsize, ssize = get_neighbors_count(comm)
         for array, typecode in arrayimpl.loop():
             for n in range(1, 4):
                 for v in range(3):
                     sbuf = array(v, typecode, (ssize, n))
                     rbuf = array(-1, typecode, (rsize, n))
                     saddr = MPI.Get_address(sbuf.as_raw())
                     raddr = MPI.Get_address(rbuf.as_raw())
                     sdt, rdt = sbuf.mpidtype, rbuf.mpidtype
                     sdsp = list(
                         range(0, ssize * n * sdt.extent, n * sdt.extent))
                     rdsp = list(
                         range(0, rsize * n * rdt.extent, n * rdt.extent))
                     sdsp = [saddr + d for d in sdsp]
                     rdsp = [raddr + d for d in rdsp]
                     smsg = [MPI.BOTTOM, ([n] * ssize, sdsp), [sdt] * ssize]
                     rmsg = (MPI.BOTTOM, ([n] * rsize, rdsp), [rdt] * rsize)
                     try:
                         comm.Neighbor_alltoallw(smsg, rmsg)
                     except NotImplementedError:
                         self.skipTest('mpi-neighbor_alltoallw')
                     for value in rbuf.flat:
                         self.assertEqual(value, v)
                     sbuf.flat[:] = array(v + 1, typecode, (ssize, n)).flat
                     try:
                         comm.Ineighbor_alltoallw(smsg, rmsg).Wait()
                     except NotImplementedError:
                         self.skipTest('mpi-neighbor_alltoallw')
                     for value in rbuf.flat:
                         self.assertEqual(value, v + 1)
         comm.Free()
Esempio n. 2
0
 def testAlltoallwBottom(self):
     size = self.COMM.Get_size()
     rank = self.COMM.Get_rank()
     for array, typecode in arrayimpl.loop():
         for n in range(1, size + 1):
             sbuf = array(n, typecode, (size, n))
             rbuf = array(-1, typecode, (size, n))
             saddr = MPI.Get_address(sbuf.as_raw())
             raddr = MPI.Get_address(rbuf.as_raw())
             sdt, rdt = sbuf.mpidtype, rbuf.mpidtype
             stypes = [
                 MPI.Datatype.Create_struct([n], [saddr + d],
                                            [sdt]).Commit()
                 for d in list(
                     range(0, size * n * sdt.extent, n * sdt.extent))
             ]
             rtypes = [
                 MPI.Datatype.Create_struct([n], [raddr + d],
                                            [sdt]).Commit()
                 for d in list(
                     range(0, size * n * rdt.extent, n * rdt.extent))
             ]
             smsg = (MPI.BOTTOM, ([1] * size, [0] * size), stypes)
             rmsg = (MPI.BOTTOM, ([1] * size, [0] * size), rtypes)
             try:
                 self.COMM.Alltoallw(smsg, rmsg)
             except NotImplementedError:
                 self.skipTest('mpi-alltoallw')
             finally:
                 for t in stypes:
                     t.Free()
                 for t in rtypes:
                     t.Free()
             for value in rbuf.flat:
                 self.assertEqual(value, n)
Esempio n. 3
0
 def testSharedQuery(self):
     memory = self.WIN.tomemory()
     address = MPI.Get_address(memory)
     length = len(memory)
     memories = self.COMM.allgather((address, length))
     rank = self.COMM.Get_rank()
     size = self.COMM.Get_size()
     for i in range(size):
         mem, disp = self.WIN.Shared_query(rank)
         base = MPI.Get_address(mem)
         size = len(mem)
         if i == rank:
             self.assertEqual(base, memories[i][0])
         self.assertEqual(size, memories[i][1])
         self.assertEqual(disp, 1)
Esempio n. 4
0
 def testMessageBottom(self):
     sbuf = b"abcxyz"
     rbuf = bytearray(6)
     saddr = MPI.Get_address(sbuf)
     raddr = MPI.Get_address(rbuf)
     stype = MPI.Datatype.Create_struct([6], [saddr], [MPI.CHAR]).Commit()
     rtype = MPI.Datatype.Create_struct([6], [raddr], [MPI.CHAR]).Commit()
     smsg = [MPI.BOTTOM,  [1], [0] , [stype]]
     rmsg = [MPI.BOTTOM, ([1], [0]), [rtype]]
     try:
         Alltoallw(smsg, rmsg)
         self.assertEqual(sbuf, rbuf)
     finally:
         stype.Free()
         rtype.Free()
Esempio n. 5
0
 def testAintDiff(self):
     location = array.array('i', range(10))
     base = MPI.Get_address(location)
     addr1 = base + 8
     addr2 = base + 4
     diff = MPI.Aint_diff(addr1, addr2)
     self.assertEqual(diff, 4)
Esempio n. 6
0
 def testGetAddress1(self):
     from struct import pack, unpack
     location = array.array('i', range(10))
     bufptr, _ = location.buffer_info()
     addr = MPI.Get_address(location)
     addr = unpack('P', pack('P', addr))[0]
     self.assertEqual(addr, bufptr)
Esempio n. 7
0
 def testGetAttr(self):
     base = MPI.Get_address(self.memory)
     size = len(self.memory)
     unit = 1
     self.assertEqual(size, self.WIN.Get_attr(MPI.WIN_SIZE))
     self.assertEqual(unit, self.WIN.Get_attr(MPI.WIN_DISP_UNIT))
     self.assertEqual(base, self.WIN.Get_attr(MPI.WIN_BASE))
Esempio n. 8
0
 def testGetAddress2(self):
     from struct import pack, unpack
     location = numpy.asarray(range(10), dtype='i')
     bufptr, _ = location.__array_interface__['data']
     addr = MPI.Get_address(location)
     addr = unpack('P', pack('P', addr))[0]
     self.assertEqual(addr, bufptr)
Esempio n. 9
0
 def testMemory(self):
     memory = self.WIN.tomemory()
     pointer = MPI.Get_address(memory)
     length = len(memory)
     base, size, dunit = self.WIN.attrs
     self.assertEqual(size, length)
     self.assertEqual(dunit, 1)
     self.assertEqual(base, pointer)
Esempio n. 10
0
 def testGetAddress(self):
     try:
         from array import array
         location = array('i', range(10))
         bufptr, _ = location.buffer_info()
         addr = MPI.Get_address(location)
         self.assertEqual(addr, bufptr)
     except ImportError:
         pass
     try:
         from numpy import asarray
         location = asarray(range(10), dtype='i')
         bufptr, _ = location.__array_interface__['data']
         addr = MPI.Get_address(location)
         self.assertEqual(addr, bufptr)
     except ImportError:
         pass
Esempio n. 11
0
 def testAintAdd(self):
     try:
         from array import array
     except ImportError:
         return
     location = array('i', range(10))
     base = MPI.Get_address(location)
     addr = MPI.Aint_add(base, 4)
     self.assertEqual(addr, base + 4)
Esempio n. 12
0
 def testCapsule(self):
     buf = DLPackCPUBuf('i', [0,1,2,3])
     #
     capsule = buf.__dlpack__()
     MPI.Get_address(buf)
     MPI.Get_address(buf)
     del capsule
     #
     capsule = buf.__dlpack__()
     retvals = [capsule] * 2
     buf.__dlpack__ = lambda *args, **kwargs: retvals.pop()
     MPI.Get_address(buf)
     self.assertRaises(BufferError, MPI.Get_address, buf)
     del buf.__dlpack__
     del capsule
     #
     buf.__dlpack__ = lambda *args, **kwargs:  None
     self.assertRaises(BufferError, MPI.Get_address, buf)
     del buf.__dlpack__
Esempio n. 13
0
 def testContiguous(self):
     buf = DLPackCPUBuf('i', range(8))
     dltensor = buf.managed.dl_tensor
     #
     dltensor.ndim, dltensor.shape, dltensor.strides = \
         dlpack.make_dl_shape([2, 2, 2], order='C')
     s = dltensor.strides
     strides = [s[i] for i in range(dltensor.ndim)]
     s[0], s[1], s[2] = [strides[i] for i in [0, 1, 2]]
     MPI.Get_address(buf)
     s[0], s[1], s[2] = [strides[i] for i in [2, 1, 0]]
     MPI.Get_address(buf)
     s[0], s[1], s[2] = [strides[i] for i in [0, 2, 1]]
     self.assertRaises(BufferError, MPI.Get_address, buf)
     s[0], s[1], s[2] = [strides[i] for i in [1, 0, 2]]
     self.assertRaises(BufferError, MPI.Get_address, buf)
     del s
     #
     del dltensor
Esempio n. 14
0
 def testAttributes(self):
     cgroup = self.COMM.Get_group()
     wgroup = self.WIN.Get_group()
     grpcmp = MPI.Group.Compare(cgroup, wgroup)
     cgroup.Free()
     wgroup.Free()
     self.assertEqual(grpcmp, MPI.IDENT)
     base, size, unit = self.WIN.attrs
     self.assertEqual(size, len(self.memory))
     self.assertEqual(unit, 1)
     self.assertEqual(base, MPI.Get_address(self.memory))
Esempio n. 15
0
 def testAintDiff(self):
     try:
         from array import array
     except ImportError:
         return
     location = array('i', range(10))
     base = MPI.Get_address(location)
     addr1 = base + 8
     addr2 = base + 4
     diff = MPI.Aint_diff(addr1, addr2)
     self.assertEqual(diff, 4)
Esempio n. 16
0
 def testStrides(self):
     buf = DLPackCPUBuf('i', range(8))
     dltensor = buf.managed.dl_tensor
     #
     for order in ('C', 'F'):
         dltensor.ndim, dltensor.shape, dltensor.strides = \
             dlpack.make_dl_shape([2, 2, 2], order=order)
         MPI.Get_address(buf)
         dltensor.strides[0] = -1
         self.assertRaises(BufferError, MPI.Get_address, buf)
     #
     del dltensor
Esempio n. 17
0
 def testNdim(self):
     buf = DLPackCPUBuf('i', [0,1,2,3])
     dltensor = buf.managed.dl_tensor
     #
     for ndim in (2, 1, 0):
         dltensor.ndim = ndim
         MPI.Get_address(buf)
     #
     dltensor.ndim = -1
     self.assertRaises(BufferError, MPI.Get_address, buf)
     #
     del dltensor
Esempio n. 18
0
 def testDevice(self):
     buf = DLPackCPUBuf('i', [0,1,2,3])
     buf.__dlpack_device__ = None
     self.assertRaises(TypeError, MPI.Get_address, buf)
     buf.__dlpack_device__ = lambda: None
     self.assertRaises(TypeError, MPI.Get_address, buf)
     buf.__dlpack_device__ = lambda: (None, 0)
     self.assertRaises(TypeError, MPI.Get_address, buf)
     buf.__dlpack_device__ = lambda: (1, None)
     self.assertRaises(TypeError, MPI.Get_address, buf)
     buf.__dlpack_device__ = lambda: (1,)
     self.assertRaises(ValueError, MPI.Get_address, buf)
     buf.__dlpack_device__ = lambda: (1, 0, 1)
     self.assertRaises(ValueError, MPI.Get_address, buf)
     del buf.__dlpack_device__
     MPI.Get_address(buf)
Esempio n. 19
0
 def testShape(self):
     buf = DLPackCPUBuf('i', [0,1,2,3])
     dltensor = buf.managed.dl_tensor
     #
     dltensor.ndim = 1
     dltensor.shape[0] = -1
     self.assertRaises(BufferError, MPI.Get_address, buf)
     #
     dltensor.ndim = 0
     dltensor.shape = None
     MPI.Get_address(buf)
     #
     dltensor.ndim = 1
     dltensor.shape = None
     self.assertRaises(BufferError, MPI.Get_address, buf)
     #
     del dltensor
Esempio n. 20
0
 def testAintAdd(self):
     location = array.array('i', range(10))
     base = MPI.Get_address(location)
     addr = MPI.Aint_add(base, 4)
     self.assertEqual(addr, base + 4)
Esempio n. 21
0
 def testBottom(self):
     base = MPI.Get_address(MPI.BOTTOM)
     addr = MPI.Aint_add(base, 0)
     self.assertEqual(addr, base)
     diff = MPI.Aint_diff(base, base)
     self.assertEqual(diff, 0)
Esempio n. 22
0
    buf[0] = b'x'
except TypeError as e:
    print e
# create a memory view of mem
mv = memoryview(mem)
# create a memory view of mem1
mv1 = memoryview(mem1)
print 'before change: mv[0] = %s, mv1[0] = %s' % (mv[0], mv1[0])
# change mv[0]
mv[0] = 'x'
print 'after change: mv[0] = %s, mv1[0] = %s' % (mv[0], mv1[0])
# release the memory object
mem.release()

print

# allocate a memory of 40 bytes, return a MPI.memory object
mem = MPI.Alloc_mem(10 * 4)
print 'len(mem):', len(mem)
print 'mem.address:', MPI.Get_address(mem)
# create a numpy array from the allocated memory
# NOTE: use copy = False here to avoid the copy
buf = np.array(mem, dtype='B', copy=False)
# cast to be int array
npary = np.ndarray(buffer=buf, dtype='i', shape=(10, ))
# now you can operate the memory buffer by the usual numpy array operations
npary[:] = np.arange(10)
print 'npary.tobytes:', npary.tobytes()
# release the memory object
MPI.Free_mem(mem)
print 'len(mem) after free:', len(mem)
Esempio n. 23
0
# Aint_add_diff.py
"""
Demonstrates the usage of MPI.Aint_add and MPI.Aint_diff.

Run this with 2 processes like:
$ mpiexec -n 2 python Aint_add_diff.py
"""

import numpy as np
from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.rank

ary = np.arange(10, dtype='i')
base = MPI.Get_address(ary)
print 'rank %d has base address: %d' % (rank, base)
disp = 4
addr = MPI.Aint_add(base, disp)
print 'rank %d has base + %d = %d' % (rank, disp, addr)
diff = MPI.Aint_diff(addr, base)
print 'rank %d has %d - base = %d' % (rank, addr, diff)
Esempio n. 24
0
 def testNone(self):
     base = MPI.Get_address(None)
     addr = MPI.Aint_add(base, 0)
     self.assertEqual(addr, base)
     diff = MPI.Aint_diff(base, base)
     self.assertEqual(diff, 0)
Esempio n. 25
0
 def testAttributes(self):
     base, size, unit = self.WIN.attrs
     self.assertEqual(base, MPI.Get_address(self.memory))
     self.assertEqual(size, len(self.memory))
     self.assertEqual(unit, 1)
Esempio n. 26
0
 def testMemory(self):
     memory = self.WIN.tomemory()
     base = MPI.Get_address(memory)
     size = len(memory)
     self.assertEqual(base, 0)
     self.assertEqual(size, 0)
Esempio n. 27
0
 def testGetAddress(self):
     from array import array
     location = array('i', range(10))
     addr = MPI.Get_address(location)
     bufptr, buflen = location.buffer_info()
     self.assertEqual(addr, bufptr)