Efficienza nel richiamare una funzione

1946981 (3070 points)
4 14 34
asked Nov 15, 2020 in HW4 obbligatorio by 1946981 (3,070 points)
Ho visto dal line profiler che una funzione ("A") nel richiamarne un'altra ("B") impiega 1/3 del tempo in più rispetto a quanto la funzione ("B") stessa impiega ad essere svolta . Cioè se "B" da line profiler è  (200ms), "A" è ( tempo delle altre istruzioni + 300ms).  Questo problema lo riscontro nel calcolo degli ES, come faccio a ridurre il tempo?
139 views

3 Answers

AdSum (16290 points)
9 20 134
answered Nov 15, 2020 by AdSum (16,290 points)
100 ms per richiamare una funzione mi sembra un po' tantino. Richiarmarla ha ovviamente i suoi costi, ma si parla di 0.1 ms, 1ms al massimo. Potresti dare più dettagli? Magari uno screen del profiler (che non contiene codice quindi penso non vada contro le regole)
1946981 (3070 points)
4 14 34
commented Nov 15, 2020 by 1946981 (3,070 points)
Ho arrotondato un po' i tempi ma comunque l'esempio l'ho tratto dal test più lento
1946981 (3070 points)
4 14 34
commented Nov 15, 2020 by 1946981 (3,070 points)
https://drive.google.com/file/d/1HQVLFV9PD61Glu4D-dHimN6ubcxUwKoH/view?usp=sharing

https://drive.google.com/file/d/1dzz3WHt8lgPEf64KTKieBJprgExhRPzR/view?usp=sharing

Spero si riescano ad aprire, quella in verde è la funzione "A" e quella in marrone è la funzione che viene chiamata dentro ad "A".
AdSum (16290 points)
9 20 134
commented Nov 15, 2020 by AdSum (16,290 points)
Effettivamente c'è una strana discrepanza. Appena posso cerco di analizzare le immagini meglio per capire dove si trova il problema
1946981 (3070 points)
4 14 34
commented Nov 15, 2020 by 1946981 (3,070 points)
Grazie mille
AdSum (16290 points)
9 20 134
commented Nov 15, 2020 by AdSum (16,290 points)
Allora, ho riguardato bene le foto e ho trovato qualcosa che vorrei chiarire. La funzione B, quindi quella con i colori marroni, ci mette in totale 176 ms, mentre ciò che è evidenziato nella funzione A ci mette solo 0.140 ms, e viene ripetuta 2000 e passa volte, Sicuro che sia quella la chiamata? I tempi non coincidono.
1946981 (3070 points)
4 14 34
commented Nov 15, 2020 by 1946981 (3,070 points)
La funzione B itera su ciascuna riga della poesia (e al suo interno su ciascuna lettera perché mi serve a trovare le sillabe), è questo che determina l'aumento del tempo? Perché dal line profiler mi sembra di capire che, quando calcola il tempo di esecuzione per la funzione B, già consideri il fatto che itera su ciascuna riga.
twgever (15190 points)
7 27 105
answered Nov 15, 2020 by twgever (15,190 points)
dipende, può essere che hai chiamato più volte la funzione B, e quindi ti spende abbastanza tempo visto che la deve chiamare più volte?
1946981 (3070 points)
4 14 34
commented Nov 15, 2020 by 1946981 (3,070 points)
La funzione B itera su ciascuna riga, è possibile  ottimizzare i tempi se itero all'interno della funzione B invece che richiamarla più volte?
twgever (15190 points)
7 27 105
commented Nov 15, 2020 by twgever (15,190 points)
assolutamente sì. Ottieni lo stesso risultato, ma risparmiandoti il dover richiamare la funzione B chissà quante migliaia di volte. Secondo me la ragione per cui la chiamata della funzione B ti impiega tutto questo tempo, è solo perchè viene chiamata più volte.
giordano_sannino (13650 points)
7 16 81
answered Nov 15, 2020 by giordano_sannino (13,650 points)
forse sono un po' troppi, gli passi cose giganti forse?