[Dies ist mein erster Beitrag und ich hoffe, ich habe die Verwendung von SE nicht völlig missverstanden - wenn ja, entschuldige ich mich im Voraus]
Ich stimme "bgschaid" zu, dass die Frage aufgrund der bereitgestellten Informationen sehr schwer zu beantworten ist. Es macht einen großen Unterschied, ob Sie möchten, dass Routinen auf niedriger Ebene eine Multi-Core-Architektur ausnutzen, oder ob Sie Parallelität für peinlich parallele Probleme ausnutzen müssen - oder etwas dazwischen. Eine Übersicht über verschiedene parallele Rechenmöglichkeiten in Python finden Sie hier .
Im ersteren Fall empfehle ich auf jeden Fall, Tools wie NumPy / SciPy zu verwenden, die zumindest in der von Enthought kompilierten MKL-Version Multi-Core-Architekturen unterstützen. Hier können Sie die Anzahl der zu verwendenden Kerne über die Umgebungsvariable "MKL_NUM_THREADS" steuern. Dies beruht auf hochoptimierten Bibliotheken, von denen wir kaum erwarten können, dass sie die Leistung übertreffen. Ich glaube, es wird allgemein empfohlen, diese hochwertigen und hochoptimierten Bibliotheken nach Möglichkeit zu verwenden.
Wenn Sie auf einer groben Ebene nutzen Parallelität wollen, der Python Standard - Tool Multiprocessing ist einfach zu bedienen - und es unterstützt auch gemeinsam genutzte Datenobjekte. Im Rahmen des Multiprocessing- Pakets stehen verschiedene Tools zur Verfügung . Ich habe map_async (SIMD like) und apply_async (MIMD like) für mehrere Probleme mit guten Ergebnissen verwendet. Das Multiprocessing- Paket ist recht einfach zu verwenden. Da es ein Standardbestandteil von Python ist, können Sie davon ausgehen, dass andere potenzielle Benutzer Ihres Codes es problemlos verwenden können. Multiprocessing verknüpft auch direkt mit NumPy-Datenobjekten. Bei Verwendung von MultiprocessingIch würde Ihnen empfehlen, die Umgebungsvariable "MKL_NUM_THREADS" auf 1 zu setzen, sodass NumPy nur einen Kern für jeden Prozess / Worker zulässt. Andernfalls kann es zu einem Ressourcenkonflikt zwischen NumPy parallel und Multiprocessing kommen, der zu einer Leistungsverschlechterung führt. Multiprocessing funktioniert gut für eine Multi-CPU / Multi-Core-Architektur unter demselben Betriebssystem. Ich habe Multiprocessing auf einem Computer mit gemeinsamem Speicher mit 4 x Xeon E7-4850-CPUs (jeweils 10 Kerne) und 512 GB Speicher verwendet und es hat sehr gut funktioniert. Freigegebene Arrays können durch Multiprocessing.Array oder Sharedctypes verarbeitet werden . Die Python-Dokumentation finden Sie hier - überprüfen Sie dielibrary.pdf Datei. Ich habe einige Folien, die einige der grundlegenden Teile davon erklären - PM mich, wenn Sie diese wollen.
Wenn Sie eine Cluster-Konfiguration mit verteiltem Speicher haben, ist mpi4py wahrscheinlich das bevorzugte Tool. Ich habe dies selbst nicht verwendet, aber ich weiß, dass es in der parallelen Python-Programmierung häufig verwendet wird.