[ 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 Both sides next revision
treex:api-implementation [2016/01/08 18:28]
popel
treex:api-implementation [2016/01/08 19:03]
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 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 =====

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