2009-05-18 7 views
1

Voici quelques sortie -I dprofpp, pour presque le même programme sur différents formats d'entrée (programme utilise fichier: Lien pour lire le fichier d'entrée etDonner un sens d'une certaine sortie DProf

fait un certain filtrage des lignes La question est. pourquoi le temps écoulé est-il toujours doublé pour ce programme?

Je pose cette question parce que fixer cela rendrait mon programme plus rapide de 2x sans plus de magie - est-ce, peut-être, à cause de dprof? Comment puis-je le savoir?

La valeur de% Time dans les deux derniers ensembles est également source de confusion:

Total Elapsed Time = 456.5656 Seconds 
    User+System Time = 206.2156 Seconds 
Inclusive Times 
%Time ExclSec CumulS #Calls sec/call Csec/c Name 
87.6 25.71 180.65 157920 0.0000 0.0001 Tie::File::FETCH 
75.1 28.96 154.93 157920 0.0000 0.0001 Tie::File::_fetch 
26.0 14.77 53.769 839753 0.0000 0.0001 Tie::File::Cache::insert 
20.2 41.73 41.732 167950 0.0000 0.0000 Tie::File::_read_record 
18.9 11.54 38.998 839753 0.0000 0.0000 Tie::File::Heap::insert 
17.2 21.16 35.610 157920 0.0000 0.0000 Tie::File::Cache::lookup 
12.4 0.566 25.571 14503 0.0000 0.0018 Tie::File::FETCHSIZE 
11.9 6.701 24.732  1 6.7008 24.731 Tie::File::_fill_offsets 
11.5 10.57 23.874 839753 0.0000 0.0000 Tie::File::Heap::_insert_new 
7.00 4.756 14.444 739447 0.0000 0.0000 Tie::File::Heap::lookup 
6.25 11.62 12.893 839755 0.0000 0.0000 Tie::File::_seek 
5.33 10.99 10.991 839753 0.0000 0.0000 Tie::File::Cache::_heap_move 
4.70 6.796 9.688 739447 0.0000 0.0000 Tie::File::Heap::promote 
3.14 6.474 6.474 157920 0.0000 0.0000 Tie::File::Heap::_nseq 
1.12 2.311 2.311 839753 0.0000 0.0000 Tie::File::Heap::_nelts_inc 

Total Elapsed Time = 1029.736 Seconds 
    User+System Time = 562.5560 Seconds 
Inclusive Times 
%Time ExclSec CumulS #Calls sec/call Csec/c Name 
119. 58.01 671.82 304761 0.0000 0.0002 Tie::File::FETCH 
109. 62.95 613.81 304761 0.0000 0.0002 Tie::File::_fetch 
68.6 30.71 385.95 154266 0.0000 0.0003 Tie::File::Cache::insert 
47.2 4.344 265.93 536190 0.0000 0.0005 Tie::File::Cache::flush 
46.5 7.502 261.58 536190 0.0000 0.0005 Tie::File::Cache::reduce_size_to 
45.1 4.131 254.08 636473 0.0000 0.0004 Tie::File::Heap::popheap 
44.4 148.4 249.95 636473 0.0002 0.0004 Tie::File::Heap::remove 
21.7 122.5 122.50 142968 0.0000 0.0000 Tie::File::Cache::_heap_move 
15.9 48.97 89.786 304761 0.0000 0.0000 Tie::File::Cache::lookup 
15.8 25.25 89.314 154266 0.0000 0.0001 Tie::File::Heap::insert 
14.2 80.39 80.394 308533 0.0000 0.0000 Tie::File::_read_record 
10.0 26.06 56.595 154266 0.0000 0.0000 Tie::File::Heap::_insert_new 
9.13 16.15 51.384  1 16.157 51.384 Tie::File::_fill_offsets 
9.13  - 51.384  1  - 51.384 Tie::File::FETCHSIZE 
7.26 15.52 40.815 150494 0.0000 0.0000 Tie::File::Heap::lookup 

Total Elapsed Time = 556.7212 Seconds 
    User+System Time = 290.2512 Seconds 
Inclusive Times 
%Time ExclSec CumulS #Calls sec/call Csec/c Name 
115. 51.05 336.00 335279 0.0000 0.0001 Tie::File::FETCH 
98.1 50.85 284.95 335279 0.0000 0.0001 Tie::File::_fetch 
35.4 45.84 102.90 335279 0.0000 0.0000 Tie::File::Cache::lookup 
29.0 18.79 84.176 107247 0.0000 0.0001 Tie::File::Cache::insert 
22.5 17.16 65.380 107247 0.0000 0.0001 Tie::File::Heap::insert 
19.6 21.19 57.056 228032 0.0000 0.0000 Tie::File::Heap::lookup 
17.2 50.07 50.077 214494 0.0000 0.0000 Tie::File::_read_record 
14.9 16.68 43.486 107247 0.0000 0.0000 Tie::File::Heap::_insert_new 
12.3 25.18 35.862 228032 0.0000 0.0000 Tie::File::Heap::promote 
10.8 9.213 31.547  1 9.2133 31.546 Tie::File::_fill_offsets 
10.8  - 31.546  1  - 31.546 Tie::File::FETCHSIZE 
7.90 22.92 22.923 107247 0.0000 0.0000 Tie::File::Cache::_heap_move 
6.64 15.98 19.280 107247 0.0000 0.0000 Tie::File::_seek 
5.31 15.41 15.411 335279 0.0000 0.0000 Tie::File::Heap::_nseq 
1.34 3.883 3.883 107247 0.0000 0.0000 Tie::File::Heap::_nelts_inc 

Voici le genre de code dont je parle: http://www.perlmonks.org/?node_id=763564

+0

re "ne peux pas installer des modules" est bollocks: http://stackoverflow.com/que stions/755168/perl-myths/755179 # 755179 –

+0

Correct - Tim m'a dit la même chose sur PM. J'ai dit la mauvaise chose - je n'ai pas de compilateur sur le système distant. C'est moi qui dis la bonne chose ... de toute façon, j'essaierai quelque chose. – PoorLuzer

+1

Si vous pouvez faire correspondre les versions de glibs/gcc/perl sur un autre ordinateur, vous pouvez compiler à distance et expédier le binaire compilé. C'est plus difficile, mais toujours faisable. c'est encore une autre raison d'écrire un C-compilateur en Perl;) –

Répondre

4
  1. Tie :: File vous dit votre goulot d'étranglement est en train de lire à partir du disque. Donc, votre optimisation est terminée. À moins bien sûr, vous pouvez trouver une façon plus intelligente de pas lire à partir du disque.

  2. Utilisez Devel::NYTProf, c'est beaucoup plus complet.

+0

Oui Kent. De tous les commentaires que j'ai reçus, NYT semble être la meilleure solution ... J'utiliserai ça à partir de maintenant. – PoorLuzer

+0

+1 pour une réponse courte et précise! – PoorLuzer

+0

Problèmes! J'ai essayé d'utiliser Devel :: NYTProf, mais il n'est pas installé comme dprof. J'ai essayé de l'installer à la main SEULEMENT pour découvrir qu'il utilise XS. Donc moi en utilisant Devel :: NYTProf est à peu près hors de question parce que je ne suis pas administrateur. – PoorLuzer

0

La question est de savoir pourquoi le temps écoulé toujours le double de ce programme?

Ma compréhension est-ce parce que la moitié du temps est consacré à I/O [Je peux me tromper ici]

Mais, pour avoir une meilleure idée de l'endroit où le temps réel est passé, utilisez

$> dprofpp -I -r 

OU

$>dprofpp -I -r -A 
Questions connexes