[To jest mój pierwszy post i mam nadzieję, że całkowicie nie zrozumiałem użycia SE - jeśli tak, z góry przepraszam]
Zgadzam się z „bgschaid”, że na pytanie bardzo trudno odpowiedzieć na podstawie dostarczonych informacji. To ogromna różnica, jeśli chcesz, aby procedury niskiego poziomu wykorzystywały architekturę wielordzeniową lub jeśli potrzebujesz równoległości w przypadku kłopotliwych równoległych problemów - lub czegoś pośredniego. Przegląd różnych możliwości obliczeń równoległych w Pythonie można znaleźć tutaj .
W pierwszym przypadku z pewnością polecam korzystanie z narzędzi takich jak NumPy / SciPy, które przynajmniej w skompilowanej wersji MKL od Enthought obsługuje architektury wielordzeniowe. Tutaj możesz kontrolować liczbę rdzeni do użycia za pomocą zmiennej środowiskowej „MKL_NUM_THREADS”. Opiera się to na wysoce zoptymalizowanych bibliotekach, których nie możemy oczekiwać pod względem wydajności. Uważam, że zaleca się korzystanie z tych wysokiej jakości i wysoce zoptymalizowanych bibliotek, gdy tylko jest to możliwe.
Jeśli chcesz wykorzystać równoległość na zgrubnym poziomie, standardowe wieloprzetwarzanie narzędzi w języku Python jest łatwe w użyciu - i obsługuje również współdzielone obiekty danych. Istnieją różne narzędzia do wykorzystania jako część pakietu wieloprocesowego . Użyłem map_async (podobny do SIMD) i apply_async (podobny do MIMD) dla kilku problemów z dobrymi wynikami. Wieloprocesorowe Pakiet jest bardzo prosty w obsłudze i jest standardową częścią Pythona oznacza, że można się spodziewać inni potencjalni użytkownicy swój kod łatwo móc go używać. Multiprocessing prowadzi również bezpośrednio do obiektów danych NumPy. Podczas korzystania z wielu procesówPolecam ustawić zmienną środowiskową „MKL_NUM_THREADS” na 1, tak aby NumPy był dozwolony tylko jeden rdzeń dla każdego procesu / procesu roboczego - w przeciwnym razie możesz skończyć z rywalizacją o zasoby między NumPy równoległym a wieloprocesowym, co prowadzi do obniżenia wydajności. Multiprocessing działa dobrze dla architektury wieloprocesorowej / wielordzeniowej w tym samym systemie operacyjnym. Użyłem przetwarzania wieloprocesorowego na komputerze z pamięcią współdzieloną z 4 procesorami Xeon E7-4850 (każdy 10 rdzeni) i 512 GB pamięci i działało to bardzo dobrze. Tablice współdzielone mogą być obsługiwane przez proces wieloprocesowy . Tablica lub typy współdzielone . Dokumentację Pythona można znaleźć tutaj - sprawdźplik biblioteki.pdf . Mam kilka slajdów wyjaśniających niektóre podstawowe części tego - napisz do mnie, jeśli chcesz.
Jeśli masz konfigurację klastra z pamięcią rozproszoną, uważam, że mpi4py jest prawdopodobnie preferowanym narzędziem. Nie używałem tego sam, ale wiem, że jest on często używany w programowaniu równoległym w Pythonie.