Iterieren über eine Liste parallel zu Cython

8

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%     
clstaudt 23.07.2013, 13:42
quelle

2 Antworten

6

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:

%Vor%

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: Ссылка

    
IanH 23.07.2013, 20:25
quelle
0

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

    
gaborous 22.05.2015 18:05
quelle