2015-01-22 13 views
6

Impostazione: Supponiamo di avere un software ragionevolmente dettagliato (in Julia), che implica l'interazione di più moduli. Mi sembra che funzioni più lentamente del dovuto. Tipicamente le funzioni first culprit to check for is type unstable functions, ovvero quelle in cui il compilatore non è in grado di determinare in anticipo quale sarà il tipo di output.Come rilevare le funzioni unstable del tipo in Julia

Domanda: Come posso rilevare queste funzioni instabili di tipo?

Che cosa faccio attualmente: Uso gli strumenti di profilazione, ad es. il pacchetto ProfileView.jl di @tholy, per rilevare i colli di bottiglia, partendo dal presupposto che le funzioni unstable di tipo verranno visualizzate qui (a causa del loro eccessivo tempo di esecuzione). Ma ciò che sarebbe veramente bello è una sorta di strumento di debug che, dopo aver eseguito una routine, sputerà un elenco di funzioni in cui il compilatore non è stato in grado di determinare il tipo di output prima del tempo. È possibile?

risposta

6

Si potrebbe provare su TypeCheck.jl bit che i profiler dicono essere lenti.

Julia 0.4 ha @code_warntype pure.

+0

Huh. In qualche modo ero completamente all'oscuro del pacchetto TypeCheck, né appariva nella mia ricerca. Questo è esattamente quello che sto cercando :-) Mille grazie! –

4

Oltre agli ottimi suggerimenti di IainDunning, eseguire julia con --track-allocation=user e analizzare i risultati con analyze_malloc dal pacchetto Coverage è un buon modo per ottenere rapidamente una panoramica di alto livello. Il principio è che l'instabilità di tipo innesca l'allocazione della memoria, quindi cercare linee di codice che abbiano allocazioni inaspettate e di grandi dimensioni è un buon modo per trovare le più egregie istanze di instabilità di tipo.

È possibile trovare ulteriori informazioni su track-allocationin the manual e ancora più opzioni di analisi delle prestazioni described.

+0

Molto interessante. Grazie molto. –

Problemi correlati