Równoległa pętla Pythona z tablicami numerycznymi i pamięcią współdzieloną

Znam kilka pytań i odpowiedzi na ten temat, ale nie znalazłem zadowalającej odpowiedzi na ten konkretny problem:

Jaki jest najłatwiejszy sposób na prostą równoległość pamięci współdzielonej pętli Pythona, w której manipuluje się tablicami numerycznymi za pomocą funkcji numpy / scipy?

Nie szukam najskuteczniejszego sposobu, po prostu chciałem wdrożyć coś prostego, które nie wymaga znaczącego przepisywania, gdy pętla nie jest uruchomiona równolegle. Podobnie jak implementacja OpenMP w językach niższego poziomu.

Najlepszą odpowiedzią, jaką widziałem w tym zakresie, jestten, ale jest to dość niezgrabny sposób, który wymaga wyrażenia pętli w funkcji, która pobiera pojedynczy argument, kilka linii crud konwertujących wspólną tablicę, wydaje się wymagać, aby funkcja równoległa była wywoływana z__main__i wydaje się, że nie działa dobrze z interaktywnego monitu (gdzie spędzam dużo czasu).

Z całą prostotą Pythona jest to naprawdę najlepszy sposób na parellelise pętli? Naprawdę? Jest to coś trywialnego w paraleli w stylu OpenMP.

Starannie przeczytałem nieprzejrzystą dokumentację modułu wieloprocesorowego, tylko po to, aby dowiedzieć się, że jest on tak ogólny, że wydaje się odpowiedni do wszystkiego, oprócz prostej równoległości pętli. Nie interesuje mnie konfigurowanie menedżerów, serwerów proxy, potoków itp. Po prostu mam prostą pętlę, w pełni równoległą, która nie ma żadnej komunikacji między zadaniami. Wykorzystanie MPI do zrównania takiej prostej sytuacji wydaje się przesadą, nie wspominając o tym, że w tym przypadku byłoby to nieefektywne pod względem pamięci.

Nie miałem czasu, aby dowiedzieć się o wielu różnych równoległych pakietach pamięci współdzielonej dla Pythona, ale zastanawiałem się, czy ktoś ma w tym więcej doświadczenia i może pokazać mi prostszy sposób. Proszę nie sugerować technik optymalizacji szeregowej, takich jak Cython (już z niego korzystam), lub używając równoległych funkcji numpy / scipy, takich jak BLAS (mój przypadek jest bardziej ogólny i bardziej równoległy).

questionAnswers(3)

yourAnswerToTheQuestion