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

Do you need help?

Tempistiche di esecuzione homework

g
giacomo.dellomo (250 points)
0 2 3
in Avvisi by (250 points)
closed by

Buongiorno,
premetto che ho trovato diverse discussioni simili ma in nessuna sono riuscito a trovare una risposta inerente il mio problema.

Ieri ho caricato per la prima volta l'HW obbligatorio 4.
Dopo diverse ottimizzazioni, in locale sul test n.10 sono riuscito ad ottenere un tempo di esecuzione che oscilla tra 850ms e 1.10s (testato con il comando  pytest test_01.py -v -rA --durations 0

Inviando la soluzione al sistema, il test 10 fallisce per via del timeout.

Mi piacerebbe ottimizzare ma sto avendo enormi difficoltà nel capire cosa ottimizzare, in quanto con gli attuali strumenti non riesco a replicare in locale la configurazione della VM e dunque qualsiasi forma di profiling effettuata in locale diventa inutile (perché appunto la maggior parte delle volte sono sotto il secondo di esecuzione).

Sinceramente non riesco a capire come mai un test che in locale gira in circa 1 sec, mi scateni un timeout sulla VM.

Consigli? E' possibile in qualche modo capire dai log della vm avere un tempo di esecuzione delle varie funzione?

Grazie
Giacomo

265 views
closed with the note: Risolto

2 Answers

andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Dai log puoi vedere i tempi degli altri test. Poi fai una proporzione e vedi a quanto corrisponde in locale
g
giacomo.dellomo (250 points)
0 2 3
by (250 points)

Purtroppo non sembra fattibile, alcuni test sono più veloci sulla vm rispetto il pc locale.
Questo mi fa pensare che forse i test con alto utilizzo di I/O vadano più lenti sulla vm, è possibile? 
Nel caso, dovrei  concentrarmi nell'ottimizzare la lettura/scrittura (nonostante nel mio pc riesce in pochissimi ms)  

Allego qui la comparazione (test locali lanciati con comando  pytest test_01.py -v -rA --durations 0=)

LOCAL VM TEST 
1.12s call 5.01s call (timeout) test_01.py::Test::test10_example
1.07s call

0.94s call

test_01.py::Test::test03_example
0.15s call

0.06s call

test_01.py::Test::test05_example
0.11s call

0.20s call

test_01.py::Test::test07_example
0.09s call

0.04s call

test_01.py::Test::test06_example
0.08s call

0.02s call

test_01.py::Test::test01_example
0.07s call

0.03s call

test_01.py::Test::test08_example
0.06s call

0.01s call

test_01.py::Test::test02_example
0.05s call

0.03s call

test_01.py::Test::test04_example
0.05s call

0.02s call

test_01.py::Test::test09_example
0.05s call

0.18s call

test_01.py::Test::test_zz_top_types
0.02s call

0.05s call

test_01.py::Test::test_intricacy
0.01s call

0.03s call

test_01.py::Test::test_no_globals_or_mutable_args

g
giacomo.dellomo (250 points)
0 2 3
by (250 points)
Buongiorno,

Aggiungo per completezza prima di chiudere il thread che, dopo il ricalcolo fatto questa notte dal professore, lo stesso identico script ha superati tutti i test (compresi i segreti).
mirko1010 (5560 points)
13 33 60
by (5.6k points)
edited by
Sinceramente io non capisco  la Vm mi segnala questo 
 ncalls  tottime  percall  cumtime  percall filename=lineno(function)
    54424    2.646    0.000    3.018    0.000 program01.py=6(traduzione)
      961    2.081    0.002    2.101    0.002 program01.py=20(occorrenze)
  3334078    0.317    0.000    0.317    0.000 {method 'append' of 'list' objects}
       11    0.157    0.014    5.580    0.507 program01.py=37(Umkansanize)
     3864    0.112    0.000    0.119    0.000 {built-in method io.open}
     3867    0.055    0.000    0.055    0.000 {method '__exit__' of '_io._IOBase' objects}
      983    0.050    0.000    0.058    0.000 {method 'readlines' of '_io._IOBase' objects}
    54424    0.037    0.000    0.037    0.000 {built-in method maketrans}
    54424    0.036    0.000    0.036    0.000 {method 'translate' of 'str' objects}
    54505    0.029    0.000    0.029    0.000 {method 'extend' of 'list' objects}
        4    0.029    0.007    0.029    0.007 {built-in method builtins.compile}
     1909    0.026    0.000    0.031    0.000 {method 'read' of '_io.TextIOWrapper' objects}
   5351/1    0.023    0.000    0.060    0.060 ast.py=200(_fix)
   4777/1    0.022    0.000    0.070    0.070 ast.py=477(generic_visit)
      305    0.020    0.000    0.020    0.000 {built-in method posix.mkdir}
    12007    0.018    0.000    0.036    0.000 ast.py=256(iter_child_nodes)
    33717    0.018    0.000    0.024    0.000 ast.py=244(iter_fields)
    48742    0.014    0.000    0.014    0.000 {built-in method builtins.getattr}
     2939    0.014    0.000    0.020    0.000 posixpath.py=71(join)
    61127    0.013    0.000    0.013    0.000 {method 'strip' of 'str' objects}                                              

Io ottengo invece questo

 ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    54424    0.951    0.000    1.231    0.000 program01.py:5(traduzione)
      961    0.645    0.001    0.659    0.001 program01.py:23(occorrenze)
      305    0.378    0.001    0.378    0.001 {built-in method posix.mkdir}
  3331349    0.237    0.000    0.237    0.000 {method 'append' of 'list' objects}
     3863    0.111    0.000    0.116    0.000 {built-in method io.open}
       11    0.090    0.008    2.554    0.232 program01.py:39(Umkansanize)
    54424    0.028    0.000    0.028    0.000 {built-in method maketrans}
    54424    0.027    0.000    0.027    0.000 {method 'translate' of 'str' objects}
     3867    0.026    0.000    0.026    0.000 {method '__exit__' of '_io._IOBase' objects}
    54504    0.020    0.000    0.020    0.000 {method 'extend' of 'list' objects}
      983    0.017    0.000    0.022    0.000 {method 'readlines' of '_io._IOBase' objects}
     1992    0.012    0.000    0.014    0.000 {method 'read' of '_io.TextIOWrapper' objects}
     4172    0.011    0.000    0.017    0.000 posixpath.py:71(join)
     1320    0.011    0.000    0.011    0.000 {built-in method posix.stat}
    61121    0.011    0.000    0.011    0.000 {method 'strip' of 'str' objects}
   305/11    0.010    0.000    0.030    0.003 shutil.py:627(_rmtree_safe_fd)
        4    0.009    0.002    0.009    0.002 {built-in method builtins.compile}
      972    0.009    0.000    0.009    0.000 {built-in method posix.unlink}
   2778/1    0.007    0.000    0.019    0.019 ast.py:205(_fix)
   2366/1    0.006    0.000    0.019    0.019 ast.py:488(generic_visit)

Qunado NON passavo il test 10 in VM ottenevo  circa 6500 ms (quindi al più gli altri test costavano 1499)    program01.py:39(Umkansanize) Quindi immagino di aver ridotto il test 10 sotto i 5 secondi  e complessivamente vado a 5580 sempre in VM 

Per il mio profiling ottenevo 3500 e ora 2554  circa quindi ancora 1 secondo di differenza

Pero credo ci sia Sicuramente un incongruenza , l'efficienza  che ora posso vedere sui risultati   mi segnala  piu o meno  seguendo la logica di questa riga ottenuta nel mio profiling    2.554     program01.py:39(Umkansanize)

andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Nota che i tempi veri del test 10 vengono troncati dal timeout.

Per conoscerli aumenta il timeout