[python-users] Performance-Optimierung einiger Berechnungen

marian marian at sendung.de
Di Dez 3 10:10:25 CET 2013


Hallo!

Ich habe hier 

https://github.com/marians/audiocalc/

bzw. hier

https://github.com/marians/audiocalc/blob/master/audiocalc/__init__.py

ein paar Funktionen für die Berechnung von Schallpegeln, Luftdämpfung etc. aus verschiedenen Quellen "zusammengestückelt". Den Code nutze ich auch in einem Projekt, in dem es um Lärm-Modellierung geht. Speziell die Funktionen "distant_total_damped_rated_level" wird häufig aufgerufen und ist für einen großen Teil der Laufzeit meiner Modellberechnung verantwortlich.

Gibt es hier einen Experten, der glaubt, die Laufzeit der Funktion spürbar verringern zu können? "Spürbar" sollte schon mind. 20% Beschleunigung bedeuten (wohl gemerkt auf einer CPU).

Ein Benchmark-Script liegt im Repository und kann mit "python -m audiocalc.benchmark_damping" ausgeführt werden. Mit -p gibt es diese Profiling-Ausgabe (gekürzt):

8175699 function calls in 4.993 seconds
Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   568480    2.759    0.000    3.636    0.000 __init__.py:19(damping)
   568480    0.902    0.000    1.092    0.000 __init__.py:73(distant_level)
    71060    0.040    0.000    4.936    0.000 __init__.py:88(distant_total_damped_rated_level)
  1705440    0.211    0.000    0.211    0.000 {math.exp}
  1208020    0.207    0.000    0.207    0.000 {math.log}
   568480    0.068    0.000    0.068    0.000 {math.sqrt}
    71060    0.018    0.000    0.018    0.000 {method 'keys' of 'dict' objects}
  3410880    0.731    0.000    0.731    0.000 {pow}
     3796    0.004    0.000    0.004    0.000 {range}

Wie man sieht, geht ein großer Teil der Zeit auf die Rechnung  von pow(), math.log(), auch andere Grundrechenoperationen mit floats, die hier nicht aufgeführt werden, dürften eine größere Rolle spielen.

Ich wäre durchaus gewillt, hierfür gegen Rechnung einen Obulus zu entrichten (1 bis 3 Stundensätze?). Wenn Du interessiert bist, melde Dich bitte vorher bei mir (Telefon, Mail oder Skype), damit wir das im Detail abstimmen können. Meine Kontaktdaten stehen unten.

Ansonsten bin ich natürlich auch offen für Tipps und Ratschläge im Sinne einer User Group!

Laufen soll das ganze übrigens später unter Python 2.7, Ubuntu 12 LTS auf einer Amazon EC2 c1.medium Instanz, 64bit, der audiocalc-Code sollte aber idealerweise auch auf anderen Plattformen ausführbar bleiben.

Vielen Dank und Grüße

Marian


-- 
Phone +49 2205 91829260
Skype marian.steinbach

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-koeln.de/pipermail/python-users/attachments/20131203/aadc8a7c/attachment.html>


Mehr Informationen über die Mailingliste python-users