Опять о скорости

 
+
-
edit
 

Balancer

администратор
★★★★★
Измерил тут было скорость и удивился. Новые версии Питона быстрее Перла в 2.5 раза! :D

А раньше, вроде, Питон тем ещё тормозом был... :)
 
+
-
edit
 

Vestel

разработчик OpenWorlds
Стоит смотреть, на то, что именно в задаче делается...
При работе со строками Python действительно делал Perl (но не сильно), а при работе с вычислениями я увидел совсем иную картину. Рекурсивно, считался 30 член прогрессии Фибоначи, и "удав" отстал приблизительно в 9.5 раз. Для тестирования использовался PII-Celeron300/96RAM c FreeBSD-4.8 без оптимизации ядра, замеры времени производил
time
.

Выложи свои тесты, было бы интересно сравнить, что, как и чем проверялось.
Снимаю ZENIT'ом (TTL, Helios 44M, Jupiter 21M)
Копил на фотоаппарат, но какой к черту фотоаппарат, когда я с 4 мая стал отцом замечательной дочурки.
 
+
-
edit
 

Balancer

администратор
★★★★★
Вот я на рекурсивном Фибоначи и измерял :D

P3-1000, Gentoo Linux.

code perl
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4.  
  5. sub fib
  6. {
  7.     return 1 if $_[0] < 2;
  8.     return fib($_[0]-1) + fib($_[0]-2);
  9. }
  10.  
  11. print fib(33);


code text
  1. $ time perl fib.pl
  2. 5702887
  3. real    0m25.510s
  4. user    0m23.162s
  5. sys     0m0.054s
  6.  
  7. $ perl --version
  8.  
  9. This is perl, v5.8.5 built for i686-linux


code python
  1. def fib(n):
  2.     if n < 2:
  3.     return 1
  4.  
  5.     return fib(n-1) + fib(n-2)
  6.  
  7. print fib(33)


code text
  1. $ time python fib.py
  2. 5702887
  3.  
  4. real    0m15.663s
  5. user    0m14.248s
  6. sys     0m0.041s
  7.  
  8. $ python -V
  9. Python 2.3.5


:)

Резльтат перла чуть улучшил, отказавшись от заведения переменной, но всё равно - почти вдвое.
 
+
-
edit
 

Vestel

разработчик OpenWorlds
А почему так строго (n &lt; 2) , ведь Fib(2) = 1 и этим тоже можно пользоваться.
Во всяком случае, в том учебнике математики, что я учился в школе, опередение было именно такое: два первых равны 1, а каждый следующий сумме двух предыдущих. (Не цитата, потому как за ходом лет, учебник был утерян)

Вопрос не принципиальный, для данного примера.

code text
  1. time perl fib.pl
  2. real    0m4.364s
  3. user    0m2.870s
  4. sys     0m0.010s

с кодом
code text
  1. fib.pl
  2. #!/usr/bin/perl -w
  3.  
  4. use strict;
  5.  
  6. sub fib
  7. {
  8.     return 1 if $_[0] < 3;
  9.     return fib($_[0]-1) + fib($_[0]-2);
  10. }
  11.  
  12. $_=fib(28);
Заменил вывод на экран значения присвоением, чтобы добиться большей точности замера времени.
code text
  1. time python fib.py
  2. real    0m1.288s
  3. user    0m1.250s
  4. sys     0m0.040s

И сорц к нему
code text
  1. fib.py
  2. def fib(n):
  3.         if n<3:
  4.                 return 1
  5.         return fib(n-1) + fib(n-2)
  6.  
  7. a=fib(28)

Исполнялось на удаленном институтском шелле неизвесной конфигурации. Параметр поставил в 28, потому как больше Perl-овскую программу пинали за CPU exceed limit. Python c первой попытки напечатал мне значение 30 и никем обижен не был.
Снимаю ZENIT&#039;ом (TTL, Helios 44M, Jupiter 21M)
Копил на фотоаппарат, но какой к черту фотоаппарат, когда я с 4 мая стал отцом замечательной дочурки.
 
+
-
edit
 

Balancer

администратор
★★★★★
Vestel> А почему так строго (n &lt; 2) , ведь Fib(2) = 1

Если уж оптимизировать, то до хвостовой рекурсии, или вообще до цикла нужно, благо, разворачивается :D

Нам же скорость измерить только нужно :)

Vestel> user 0m2.870s
Vestel> user 0m1.250s

Угу, пропорции те же. Но вывод можно было и не убирать, как я понимаю, он в sys, а не в user засчитается :) Вообще, приятная особенность Linux - можно одновременно все тесты запускать, когда они длительные, user-time сосчитается верно, даже если оно будет сильно меньше, чем real-time :)
 

FR0

новичок
Vestel>> А почему так строго (n &lt; 2) , ведь Fib(2) = 1
Balancer> Если уж оптимизировать, то до хвостовой рекурсии, или вообще до цикла нужно, благо, разворачивается :D
Balancer> Нам же скорость измерить только нужно :)

Если использовать psyco то фибоначи для питона еще в 30 - 40 раз быстрее отрабатывает.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru