A wrapper around mpi4py that offers simple scattering of iterable objects.
This is useful for embarassingly parallel, SPMD, type tasks that simply need to work on a list of things.
example usage:
parfor_test.py
# import the parfor function; note
# that this will automatically initialize MPI
# also import pprint for parallel-friendly printing
from simplempi.parfor import parfor, pprint
# define a list to loop over
my_list = list(range(10))
# define a function that does something with each item in my_list
def func(i):
return i**2
# loop in parallel over my_list
for i in parfor(my_list):
result = func(i)
pprint(f"{i}**2 = {result}")
Running this with mpirun on 4 processors shows that the list of 10 numbers gets scattered as evenly as possible across all 4 processors; it also shows that the order of evaluation in the for loop is not well-defined (which is okay for embarassingly parallel code like this):
$ mpirun -n 4 python parfor_test.py
(rank 1/4): 0**2 = 0
(rank 1/4): 4**2 = 16
(rank 1/4): 8**2 = 64
(rank 3/4): 2**2 = 4
(rank 3/4): 6**2 = 36
(rank 4/4): 3**2 = 9
(rank 4/4): 7**2 = 49
(rank 2/4): 1**2 = 1
(rank 2/4): 5**2 = 25
(rank 2/4): 9**2 = 81
Alternatively, one can use the object-oriented interface:
simpleMPI_test.py
import simplempi
#Initialize MPI
smpi = simplempi.simpleMPI()
#Make a list of things (20 numbers in this case)
testList = range(20)
#Scatter the list to all processors (myList differs among processes now)
myList = smpi.scatterList(testList)
#Print the list contents (as well as the rank of the printing process)
smpi.pprint(myList)
Running this with mpirun on 6 processors shows that the list of 20 numbers gets scattered as evenly as possible across all 6 processors:
$ mpirun -n 6 python simpleMPI_test.py
(rank 1/6): [0, 6, 12, 18]
(rank 2/6): [1, 7, 13, 19]
(rank 4/6): [3, 9, 15]
(rank 6/6): [5, 11, 17]
(rank 5/6): [4, 10, 16]
(rank 3/6): [2, 8, 14]
Install
python3 -m pip install simplempi
Release files for simplempi 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simplempi-0.1.5.tar.gz | 5.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simplempi-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:10.8 kB
Release files / simplempi-0.1.5.tar.gz
| Download URL | simplempi-0.1.5.tar.gz |
|---|---|
| Size | 5.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6632b19243938d847e4e0c2a68c9970cee32149c872c691c7e9b78736c4a9e8
|
|
BLAKE2b-256 checksum How to use checksums |
86723ff6782c15ed24e9b990edd4bcb5824fe4ed153cb9c0968072b42b984134
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.8.18
|
Release files / simplempi-0.1.5-py3-none-any.whl
| Download URL | simplempi-0.1.5-py3-none-any.whl |
|---|---|
| Size | 5.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f9c112e9aac4f60d292c1080a344129f2679852f5ec6977b745d9ffaf68e7ae
|
|
BLAKE2b-256 checksum How to use checksums |
86e5f98e465d14904bf5a15b26572f7c1121a508d42836e7b97333f1f21a1b57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.8.18
|