(opencv rc1) Was bewirkt, dass die Mat-Multiplikation 20x langsamer ist als die Pro-Pixel-Multiplikation?

8
%Vor%

Ersetzt durch

%Vor%

Was kann ein solches Verhalten verursachen? Liegt es daran, dass opencv "Mat" mit skalarer Multiplikation zu einer Mat mit Mat-Multiplikation "promotet" oder ist es eine spezifische gescheiterte Optimierung für Arm? (NEON ist aktiviert).

    
Boyko Perfanov 11.05.2015, 11:55
quelle

2 Antworten

2

Dies ist ein sehr altes Problem (ich habe es vor ein paar Jahren gemeldet), dass viele grundlegende Operationen zusätzliche Zeit erfordern. Nicht nur Division, sondern auch Addition, ABS, etc ... Ich kenne den wahren Grund für dieses Verhalten nicht. Noch seltsamer ist, dass die Operationen, die mehr Zeit benötigen, wie AddWeighted, tatsächlich sehr effizient sind. Versuchen Sie Folgendes:

%Vor%

Er führt mehrere Operationen pro Pixel durch, läuft aber ein paar Mal schneller als die Funktion und die Schleifenimplementierung.

Hier ist mein Bericht zum Bug-Tracker.

    
Michael Burdinov 11.05.2015 13:19
quelle
1

Das Gleiche wurde auch mit der CPU-Zeit versucht.

%Vor%

mit Ergebnissen:

%Vor%

Sie sehen, dass sich die Ergebnisse unterscheiden, wahrscheinlich weil mat.divide() die Gleitkommadivision ausführt und auf die nächste aufrundet. Während Sie Integer-Division in Ihrer schnelleren Version verwenden, die schneller ist, aber ein anderes Ergebnis ergibt.

Außerdem gibt es einen saturate_cast in der openCV-Berechnung, aber ich schätze, der größere Rechenlastunterschied ist die doppelte Präzisionsdivision.

    
Micka 11.05.2015 13:01
quelle

Tags und Links