Ich habe den folgenden Code, den ich mit Cython optimieren möchte:
%Vor%Ich habe die .pyx-Datei geschrieben und kompiliert, und wenn ich den Code ausführte, sehe ich keine signifikante Verbesserung der Leistung. Laut der Cython-Dokumentation muss ich c_types hinzufügen. Die von Cython generierte HTML-Datei zeigt an, dass der Flaschenhals die Punktprodukte sind (was natürlich erwartet wird). Bedeutet das, dass ich eine C-Funktion für die Skalarprodukte definieren muss? Wenn ja, wie mache ich das?
BEARBEITEN:
Nach ein paar Recherchen habe ich den folgenden Code erstellt. Die Verbesserung ist nur marginal. Ich bin mir nicht sicher, ob ich etwas tun kann, um es zu verbessern:
%Vor%Als allgemeine Anmerkung, wenn Sie numpy Funktionen innerhalb von Cython aufrufen und wenig anderes tun, werden Sie im Allgemeinen nur marginale Gewinne sehen, wenn überhaupt. Sie erhalten im Allgemeinen nur massive Beschleunigungen, wenn Sie Code statisch eingeben, der eine explizite for-Schleife auf der Python-Ebene verwendet (nicht in etwas, das bereits die Numpy C-API aufruft).
Sie könnten versuchen, den Code für ein Punktprodukt mit der gesamten statischen Typisierung des Zählers zu schreiben, numpy Arrays einzugeben, mit Wraparound und boundscheck auf False gesetzt, die clib-Version der Funktion sqrt
importieren und dann Versuchen Sie, die parallele for-Schleife ( prange
) zu nutzen, um openmp zu verwenden.
Tags und Links python numpy cython dot-product