Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Efficienza nel richiamare una funzione

1946981 (3070 points)
5 15 35
in HW4 obbligatorio by (3.1k 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?
335 views

3 Answers

AdSum (16290 points)
9 20 134
by (16.3k 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)
5 15 35
by (3.1k points)
Ho arrotondato un po' i tempi ma comunque l'esempio l'ho tratto dal test più lento
1946981 (3070 points)
5 15 35
by (3.1k 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
by (16.3k points)
Effettivamente c'è una strana discrepanza. Appena posso cerco di analizzare le immagini meglio per capire dove si trova il problema
1946981 (3070 points)
5 15 35
by (3.1k points)
Grazie mille
AdSum (16290 points)
9 20 134
by (16.3k 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)
5 15 35
by (3.1k 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 (17470 points)
8 29 105
by (17.5k 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)
5 15 35
by (3.1k 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 (17470 points)
8 29 105
by (17.5k 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
by (13.7k points)
forse sono un po' troppi, gli passi cose giganti forse?