<div class="gmail_quote">2010/1/12 Ruslan Zakirov <span dir="ltr"><<a href="mailto:ruslan.zakirov@gmail.com">ruslan.zakirov@gmail.com</a>></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 <<a href="mailto:kapranoff@gmail.com">kapranoff@gmail.com</a>>:<br>
<div class="im">> 2010/1/11 Ruslan Zakirov <<a href="mailto:ruslan.zakirov@gmail.com">ruslan.zakirov@gmail.com</a>>:<br>
>> Последний вариант. Отдельное префиксное индексирование чуть быстрее.<br>
><br>
> В нём ошибка, из-за которой всё работает на целых 25% быстрее, но неправильно :)<br>
><br>
>> Попробовал splice, но он медленнее<br>
>><br>
>> undef $/; @file = split ' ', scalar <>;<br>
>><br>
>> $res = '';<br>
>> for (1 .. shift(@file)) {<br>
>> $rows = $file[$cur++];<br>
>><br>
>> @s = (0) x ($rows + 1);<br>
>> for (0 .. $rows-1) {<br>
>> $i = 0; $y = 0;<br>
>> $cur += $_;<br>
>><br>
>> for ($cur .. $cur+$_) {<br>
>> $x = $y;<br>
>> $y = $s[$i];<br>
>> $s[$i] = $file[$cur] + ($x > $y? $x : $y);<br>
><br>
> Вот тут должно было $file[$_]. Использование $cur реально всё<br>
> ускоряет. Это означает, что либо у нас оптимизатор умеет вычислять<br>
> неизменяющиеся выражения перед циклом, либо срабатывает эффект<br>
> процессорного кэша.<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>