<div class="gmail_quote">2010/1/12 Ruslan Zakirov <span dir="ltr">&lt;<a href="mailto:ruslan.zakirov@gmail.com">ruslan.zakirov@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

2010/1/12 Alex Kapranoff &lt;<a href="mailto:kapranoff@gmail.com">kapranoff@gmail.com</a>&gt;:<br>
<div class="im">&gt; 2010/1/11 Ruslan Zakirov &lt;<a href="mailto:ruslan.zakirov@gmail.com">ruslan.zakirov@gmail.com</a>&gt;:<br>
&gt;&gt; Последний вариант. Отдельное префиксное индексирование чуть быстрее.<br>
&gt;<br>
&gt; В нём ошибка, из-за которой всё работает на целых 25% быстрее, но неправильно :)<br>
&gt;<br>
&gt;&gt; Попробовал splice, но он медленнее<br>
&gt;&gt;<br>
&gt;&gt; undef $/; @file = split &#39; &#39;, scalar &lt;&gt;;<br>
&gt;&gt;<br>
&gt;&gt; $res = &#39;&#39;;<br>
&gt;&gt; for (1 .. shift(@file)) {<br>
&gt;&gt;    $rows = $file[$cur++];<br>
&gt;&gt;<br>
&gt;&gt;    @s = (0) x ($rows + 1);<br>
&gt;&gt;    for (0 .. $rows-1) {<br>
&gt;&gt;        $i = 0; $y = 0;<br>
&gt;&gt;        $cur += $_;<br>
&gt;&gt;<br>
&gt;&gt;        for ($cur .. $cur+$_) {<br>
&gt;&gt;            $x = $y;<br>
&gt;&gt;            $y = $s[$i];<br>
&gt;&gt;            $s[$i] = $file[$cur] + ($x &gt; $y? $x : $y);<br>
&gt;<br>
&gt; Вот тут должно было $file[$_]. Использование $cur реально всё<br>
&gt; ускоряет. Это означает, что либо у нас оптимизатор умеет вычислять<br>
&gt; неизменяющиеся выражения перед циклом, либо срабатывает эффект<br>
&gt; процессорного кэша.<br>
<br>
</div>Бывает. Я думаю, что есть несколько реальных способов улучшить немного perl.<br>
<br>
1) По идее use integer; должен ускорять все это дело. Под действием<br>
прагмы используются pp_i_add и соответственно другие макросы получения<br>
чисел, но как-то разницы в скорости я не заметил, хотя на 5М должно<br>
быть. Похоже на баг или какой-то сторонний эфект, например какая-то<br>
операция генерит float/double, а потом обратно.<br></blockquote><div><br></div><div>Я тоже игрался с use integer и удивился, что нет прироста. Было бы интересно залезть поглубже и разобраться.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


2) Я не увидел в splice оптимизации под случаи, когда из массива<br>
только вырезаются элементы с края. В таких случаях perl может избежать<br>
переноса элементов, а только манипулировать окном. Конечно спорный<br>
момент, но можно попробовать как-то поиграться.<br></blockquote><div><br></div><div>Причём эти оптимизации есть для pop/shift. Их надо спортировать на splice.</div><div><br></div><div>Жалко, что у <a href="http://moscow.pm">moscow.pm</a> нету перлпортера-резидента ;))</div>

</div>