[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
treex:api-implementation [2016/01/08 18:28]
popel
treex:api-implementation [2016/01/08 19:27]
popel
Line 172: Line 172:
  
  
-===== Benchmark načítání CoNLL-U v Perlu =====+===== Profiling načítání CoNLL-U v Perlu =====
 Načítám cs-ud-train-l.conllu (68 MB, 41k sentences, 0.8 MWords). Časy v sekundách. Excl(usive) časy se sčítají, krom těch označených "x", což jsou pomocné (alternativní) experimenty. Načítám cs-ud-train-l.conllu (68 MB, 41k sentences, 0.8 MWords). Časy v sekundách. Excl(usive) časy se sčítají, krom těch označených "x", což jsou pomocné (alternativní) experimenty.
  
Line 180: Line 180:
 | 0.7 | 1.5 | ''split /\t/, $line''                  | split 9 atributů dle tabů | | 0.7 | 1.5 | ''split /\t/, $line''                  | split 9 atributů dle tabů |
 | 4.3 | 5.8 | ''my ($id, $form, $lemma,...) =''      | uložení těch hodnot do proměnných | | 4.3 | 5.8 | ''my ($id, $form, $lemma,...) =''      | uložení těch hodnot do proměnných |
-|x3.9 |     | ''UD::Node->new(form=>$form,...)''     | vytvoření 0.8M uzlů se stejnými atributy|+|x3.9 |     | ''UD::Node->new(form=>$form,...)''     | vytvoření 0.8M uzlů se stejnými atributy, tedy 200K uzlů za sekundu, viz [[#Benchmark konstruktorů v Perlu|následující benchmark]]|
 | 4.5 |10.3 | ''UD::Node->new(form=>$form,...)''     | vytvoření 0.8M uzlů ze skutečných dat| | 4.5 |10.3 | ''UD::Node->new(form=>$form,...)''     | vytvoření 0.8M uzlů ze skutečných dat|
 |x0.4 |10.7 | ''push @all_nodes, $node''             | uzly se ukládají do pole| |x0.4 |10.7 | ''push @all_nodes, $node''             | uzly se ukládají do pole|
Line 190: Line 190:
  
  
-  * Původní implementace byla velmi neefektivní, protože se při převěšování z kořene musely uzly odebrat z pole dětí kořene, čili se muselo to pole překopírovat a zmenšit o jeden prvek a složitost byla kvadratická. Samotné převěšení trvalo 7s (a ještě 3s se někde ztratily). Kdyby byly děti implementované spojákem místo pole (to mám stále v plánu), tak to bude rychlejší, ale stejně je zbytečné při načítání CoNLL-U uzly dávat do spojáků dětí kořene, ze kterého vím, že je budu za chvíli odebírat. +  * Původní implementace byla velmi neefektivní, protože se při převěšování z kořene musely uzly odebrat z pole dětí kořene, čili se muselo to pole překopírovat a zmenšit o jeden prvek a složitost byla kvadratická. Samotné převěšení trvalo 7s (a ještě 3s asi kvůli ''$root->create_child(...)'' místo ''UD::Node->new(...)''). Kdyby byly děti implementované spojákem místo pole (to mám stále v plánu), tak to bude míň než 7s, ale stejně je zbytečné při načítání CoNLL-U uzly dávat do spojáků dětí kořene, ze kterého vím, že je budu za chvíli odebírat. 
-  * Ušetřil jsem 10stedy víc než 7sVolám přímo ''UD::Node->new(...)'' místo ''$root->create_child(...)''+  * Vypuštěním testování cyklů v CoNLL-závislostech se ušetří necelá sekundacož za to asi nestojí 
-  * Ještě víc by šlo ušetřit vypuštěním testování cyklů v CoNLL-U závislostech (1s) optimalizací kódu set_parent bez volání této metody (další 2s). +  * Optimalizací kódu set_parent bez volání této metody se jakoby ušetří 2.5s. 
-  * Nyní se nejvíc času stráví samotným vytvářením uzlů (10.917s-0.844s). To musím ještě prozkoumat.+  * Poměrně dost času (4.3s) zabere vytváření 9 proměnných ''$form, $lemma,...''. Nešikovné je, že při ''UD::Node->new(form=>$form,...)'' se tyto proměnné zkopírují do hashe a ty původní vypadnou ze scope musejí se odalokovat. Čili vytváření uzlu zabere skoro stejný čas (4.5s). 
 +  * Když jsem všechny uzly ukládal do pole, tak odalokování pole (0.8M uzlůtrvalo cca 1s. To jsem do profilingu nezahrnul, ale benchmark jsem musel ručně spouštět víckrát.
  
 ===== Benchmark konstruktorů v Perlu ===== ===== Benchmark konstruktorů v Perlu =====
Line 208: Line 209:
   XSAccAf  324620 Class::XSAccessor::Array, sub fastnew {my $c=shift; bless [@_], $c;}   XSAccAf  324620 Class::XSAccessor::Array, sub fastnew {my $c=shift; bless [@_], $c;}
   ManualAf 333188 Manual array-based object, sub fastnew {my $c=shift; bless [@_], $c;}   ManualAf 333188 Manual array-based object, sub fastnew {my $c=shift; bless [@_], $c;}
- 
  

[ Back to the navigation ] [ Back to the content ]