2015-01-22 3 views
6

Setup: Nehmen wir an, ich habe eine ziemlich detaillierte Software (in Julia), die die Interaktion mehrerer Module beteiligt. Ich habe das Gefühl, dass es langsamer läuft als es sollte. Typischerweise die first culprit to check for is type unstable functions, d. H. Funktionen, bei denen der Compiler nicht in der Lage ist, im Voraus zu bestimmen, was der Ausgabetyp sein wird.So erkennen Sie type unstable Funktionen in Julia

Frage: Wie kann ich diese Art instabiler Funktionen erkennen?

Was ich gerade mache: Ich benutze die Profilierungswerkzeuge, z. das ProfileView.jl Paket von @tholy, um Engpässe zu erkennen, unter der Annahme, dass type unstable functions hier auftauchen (wegen ihrer übermäßigen Laufzeit). Aber was wirklich schön ist, ist eine Art Debugging-Tool, das nach dem Ausführen einer Routine eine Liste von Funktionen ausgibt, bei denen der Compiler den Ausgabetyp nicht rechtzeitig ermitteln konnte. Ist das möglich?

Antwort

6

Sie könnten versuchen TypeCheck.jl auf Bits der Profiler sagen, sind langsam.

Julia 0.4 hat @code_warntype ebenso.

+0

Huh. Irgendwie war mir das TypeCheck-Paket überhaupt nicht bewusst, und es tauchte auch nicht bei meiner Suche auf. Genau darum geht es mir :-) Vielen Dank! –

4

Zusätzlich zu den exzellenten Vorschlägen von IainDunning ist das Laufen von Julia mit --track-allocation=user und das Analysieren der Ergebnisse mit analyze_malloc aus dem Paket Coverage ein guter Weg, um schnell einen Überblick auf hoher Ebene zu erhalten. Das Prinzip ist, dass die Typinstabilität die Speicherzuordnung auslöst. Daher ist die Suche nach Codezeilen mit unerwarteten großen Zuordnungen ein guter Weg, um die ungewöhnlichsten Instanzen von Typinstabilität zu finden.

Weitere Informationen zu track-allocationin the manual und noch mehr Leistungsanalyseoptionen described.

+0

Sehr interessant. Danke vielmals. –