Ich möchte wirklich wissen, wie man die Multi-Core-Verarbeitung für Matrixmultiplikation auf numpy / pandas verwendet.
Was ich versuche, ist hier:
%Vor%Dies erfordert eine große Verarbeitungszeit wegen vieler Summen von Produkten, und ich denke, dass es einfach ist, Multithreading für eine große Matrixmultiplikation zu verwenden. Also habe ich sorgfältig gegoogelt, aber ich kann nicht finden, wie man das auf numpy / pandas macht. Muss ich Multi-Thread-Code manuell mit einer Python-integrierten Threading-Bibliothek schreiben?
In NumPy kann die Multithread-Matrixmultiplikation mit einer Multithread-Implementierung von BLAS, den Basic Linear Algebra Subroutinen, erreicht werden. Sie müssen:
dtype
von float32
oder float64
haben (und bestimmte Ausrichtungseinschränkungen erfüllen; ich empfehle, NumPy 1.7.1 oder höher zu verwenden, wenn diese gelockert wurden). Einige Einschränkungen gelten:
multiprocessing
verwenden, was die meisten Anwendungen einschließt, die joblib
verwenden. . Insbesondere werden sie hängen. Der Grund ist ein Fehler (oder das Fehlen eines Features) in GCC. Ein Patch wurde gesendet, ist aber noch nicht in den Hauptquellen enthalten. Wie für Pandas: Ich bin mir nicht sicher, wie es dot Produkte macht. Konvertieren Sie in NumPy-Arrays und zurück, um sicher zu sein.
Zunächst würde ich auch vorschlagen, zu holprigen Arrays zu konvertieren und die Punktfunktion numpys zu verwenden. Wenn Sie Zugriff auf einen MKL-Build haben, der im Moment mehr oder weniger die schnellste Implementierung ist, sollten Sie versuchen, die Umgebungsvariable OMP_NUM_THREADS
zu setzen. Dies sollte die anderen Kerne Ihres Systems aktivieren. Auf meinem MAC scheint es richtig zu funktionieren. Außerdem würde ich versuchen, np.einsum
zu verwenden, das scheint schneller zu sein als np.dot
Aber pass auf! Wenn Sie eine Multithread-Bibliothek kompiliert haben, die OpenMP zur Parallelisierung verwendet (wie MKL), müssen Sie berücksichtigen, dass das "gcc" auf allen Apple-Systemen nicht gcc ist, es ist Clang / LLVM und Clang kann nicht mit bauen OpenMP-Unterstützung im Moment, außer dass Sie den noch experimentellen OpenMP-Trunk verwenden. Sie müssen also den Intel-Compiler oder irgendeinen anderen, der OpenMP unterstützt, installieren
Tags und Links python multithreading numpy pandas matrix