Cythons Prange verbessert nicht die Leistung

8

Ich versuche, die Leistung einiger metrischen Berechnungen mit Cythons prange zu verbessern. Hier sind meine Codes:

%Vor%

Grundsätzlich wird in jeder Iteration die hausdorff-Metrik zwischen XA und jedem XB[i] berechnet. Hier ist die Signatur der Funktion _hausdorff :

%Vor%

Mein Problem ist, dass sowohl das sequentielle shausdorff als auch das parallele phausdorff die gleichen Timings haben. Darüber hinaus scheint phausdorff überhaupt keinen Thread zu erstellen.

Also meine Frage ist, was ist falsch mit meinem Code, und wie kann ich es beheben, um Threading arbeiten zu bekommen.

Hier ist mein setup.py :

%Vor%

BEARBEITEN 1: Hier ist ein Link zu dem von cython -a generierten HTML: custom_metric.html

EDIT 2: Hier ist ein Beispiel, wie Sie die entsprechenden Funktionen aufrufen können (Sie müssen kompilieren die Cython-Datei zuerst)

%Vor%     
mavillan 19.08.2016, 07:15
quelle

1 Antwort

4

Ich denke, dass die Parallelisierung funktioniert, aber der zusätzliche Aufwand für die Parallelisierung verbraucht die Zeit, die sie gespart hätte. Wenn ich mit Arrays unterschiedlicher Größe versuche, dann sehe ich eine Beschleunigung in der parallelen Version

%Vor%

Hier dauert die parallele Version ~ 2/3 der Zeit der seriellen Version für mich, was sicherlich nicht das 1/4 ist, was Sie erwarten würden, aber zumindest einen gewissen Nutzen zeigt.

Eine Verbesserung, die ich anbieten kann, ist, den Code zu ersetzen, der die Kontiguität behebt:

%Vor%

mit

%Vor%

Dies beschleunigt sowohl die parallelen als auch die nicht parallelen Funktionen ziemlich deutlich (ein Faktor von 2 mit den Arrays, die Sie ursprünglich angegeben haben). Es macht es etwas offensichtlicher, dass Sie durch den Overhead in prange verlangsamt werden - die serielle Version ist für die Arrays in Ihrem Beispiel tatsächlich schneller.

    
DavidW 27.08.2016 08:54
quelle

Tags und Links