Wie erfolgt eine Iteration parallel zu einer (Python) -Liste in Cython?
Betrachten Sie die folgende einfache Funktion:
%Vor%Dies führt zu vielen Compiler-Fehlern, da ein paralleler Abschnitt ohne GIL anscheinend nicht mit einem Python-Objekt funktionieren kann:
%Vor% Ich kenne keinen Weg, dies zu tun. Eine Liste ist ein Python-Objekt, daher benötigt die Methode __getitem__
die GIL. Wenn Sie in diesem Fall ein NumPy-Array verwenden können, funktioniert es. Wenn Sie beispielsweise über ein Array A
Gleitkommawerte doppelter Genauigkeit iterieren möchten, können Sie Folgendes tun:
In meinem Fall macht prange es auf meinem Rechner nicht schneller als eine normale Schleife, aber es könnte in anderen Fällen besser funktionieren. Weitere Informationen zur Verwendung von Prange finden Sie in der Dokumentation unter Ссылка
Ob Sie ein Array verwenden können oder nicht, hängt davon ab, wie stark Sie die Größe des Arrays ändern. Wenn Sie mit der Größe viel Flexibilität benötigen, wird das Array nicht funktionieren. Sie könnten auch versuchen, mit der vector
-Klasse in C ++ zu interagieren. Ich habe das selbst nie gemacht, aber es gibt eine kurze Beschreibung, wie man das hier macht: Ссылка
Konvertieren Sie Ihre Liste in ein Array, wenn Sie einen numerischen Wert benötigen, oder ein Bytearray, wenn Werte zwischen 0 und 255 begrenzt sind. Wenn Sie etwas anderes als numerische Werte speichern, versuchen Sie numpy oder verwenden Sie dtypes direkt. Zum Beispiel mit Bytes:
%Vor%Und wenn Sie C-Typen verwenden möchten:
ctypedef unsigned char uint8_t
Tags und Links python parallel-processing cython openmp