Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2008 13:35:27

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

Всегда думал, что питон очень быстрый(собственно по отношению к перлам и т.д. он в разы быстрее).
Ну понятно, что нативным компилируемым он в полторы сотни раз проигрывает, но это ожидаемо.

Выбираю для игры скриптоывй движок.
Попробовал луа. Ну что ж, с чистым питоном разница в ~10раз, а питон с JIT(psyco) еще 30% теряет.

Есть ли для питона нормальные реализации JIT? (Как сказал выше, тот же psyco сильно(30%) замедляет скрипт и вообще давно не развивается).

Или придется использовать lua?



Офлайн

#2 Дек. 25, 2008 14:09:05

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Питон и производительность

или рефакторить код;)
показал бы какая задача

Офлайн

#3 Дек. 25, 2008 14:12:22

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

psyco прискорює приблизно в разів 10. Код просто переробити треба. http://psyco.sourceforge.net/psycoguide/node29.html



Офлайн

#4 Дек. 25, 2008 14:12:29

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

быстрее я думаю не сделать =)
если настолько критично - бери lua c LuaJIT =)



Офлайн

#5 Дек. 25, 2008 14:13:29

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

A performance killer is the usage of the built-in functions map and filter. Never use them with Psyco.
Може через це код повільніший?



Офлайн

#6 Дек. 25, 2008 14:24:58

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

или рефакторить код
показал бы какая задача
Задача тестовая. Буду писать игру с просчетом всех объектов через скрипт.

psyco прискорює приблизно в разів 10
Не знаю, но на простом примере в вызовах методов, циклах и сравнении он показал на 30% худший резултат.
+ проект умер.

если настолько критично - бери lua c LuaJIT
С ним и сравнивал. Просто луа в ~3.5 раз быстрее питона без JIT.



Отредактировано (Дек. 25, 2008 14:27:24)

Офлайн

#7 Дек. 25, 2008 14:27:05

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

nerezus
но на простом примере в вызовах методов, циклах и сравнении он показал на 30% худший резултат.
покажи код



Офлайн

#8 Дек. 25, 2008 14:28:13

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

http://shootout.alioth.debian.org/u64q/

http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python&lang2=lua

Цікаві лінки



Отредактировано (Дек. 25, 2008 14:29:43)

Офлайн

#9 Дек. 25, 2008 14:28:41

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

Base = {}
Base.field = 0

function Base:setField(value)
self.field = value
end

function Base:getField()
return self.field
end

local start = os.time()
local base = {}
setmetatable(base, {__index = Base})
local i = 0
while i < 10000 do
local j = 0
while j < 10000 do
if (i + j) % 2 == 0 then
base:setField(base:getField() + 1)
end
j = j + 1
end
i = i + 1
end

--print(base:getField())
print(os.time() - start)
import time

class Base(object):
def __init__(self):
self.field = 0
def setField(self, value):
self.field = value
def getField(self):
return self.field

start = time.time()
base = Base()
i = 0
while i < 10000:
j = 0
while j < 10000:
if (i + j) % 2 == 0:
base.setField(base.getField() + 1)
j += 1
i += 1

#print(base.getField())
print int(round(time.time() - start))
#include <iostream>
#include <ctime>
using namespace std;

class Base {
protected:
int field;
public:
Base() {
field = 0;
}
void setField(int value) {
field = value;
}

int getField() {
return field;
}
};

int main() {
Base base;
time_t start = time (NULL);
int i = 0;
while (i < 10000) {
int j = 0;
while (j < 10000) {
if ((i + j) % 2 == 0) {
base.setField(base.getField() + 1);
}
++j;
}
++i;
}
cout << base.getField() << endl;
cout << time(NULL) - start << endl;
return 0;
}



Офлайн

#10 Дек. 25, 2008 14:30:54

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

Може через це код повільніший?
Нет, без built-in ф-ий делал тестовый скрипт.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version