Python kontra PyPy

https://xpil.eu/kto

Ka偶dy szanuj膮cy si臋 pytonista pr臋dzej czy p贸藕niej zauwa偶y, 偶e chocia偶 j臋zyk jest fajny, to jednak niezbyt szybki.

Je偶eli potrzebujemy szybko艣ci...

... piszemy w asemblerze C Rust C#

... mo偶emy zast膮pi膰 Pythona przez PyPy. Bez zbytniej utraty kompatybilno艣ci dostajemy za darmo przyspieszenie rz臋du prawie 8x (oficjalne 藕r贸d艂a m贸wi膮 o 7.8-krotnym przyspieszeniu).

A oto prosty przyk艂ad pokazuj膮cy o co chodzi.

Stara jak 艣wiat zagadka m贸wi, 偶eby znale藕膰 wszystkie uk艂ady takie, 偶e:

$$\frac{ABC}{DEF}+\frac{GH}{IJ}=1$$

Przy czym A-J to cyfry 0-9, ka偶da pojawia si臋 raz.

Przyk艂adowe rozwi膮zanie:

451 / 902 + 38 / 76 = 1

呕eby znale藕膰 wszystkie takie kombinacje (jest ich 96), napiszemy sobie pro艣ciutki skrypt w Pythonie:

#!/usr/bin/env python3

from itertools import permutations
import time
start = time.time()
licznik = 0
for p in permutations([x for x in range(10)]):
    a, b, c, d, e, f, g, h, i, j = p[0]*100, p[1]*10, p[2], p[3] * 100, p[4]*10, p[5], p[6]*10, p[7], p[8]*10, p[9]
    if((a + b + c)/(d + e + f) + (g + h) / (i + j) == 1):
        licznik += 1
        print(f'{licznik}: {(a+b+c)}/{(d+e+f)}+{(g+h)}/{(i+j)} = 1')
koniec = time.time()
print("czas wykonania: ", koniec-start)

Na moim wys艂u偶onym komputerze (i7 czwartej generacji, 3.6GHz) powy偶szy kod wykonuje si臋 w okolicach 4 sekund.

A teraz dokonamy prawie niezauwa偶alnej zmiany w pierwszej linii...


#!/usr/bin/env pypy3
...

Je偶eli uruchomimy skrypt w takiej wersji, czas wykonania spadnie do oko艂o dw贸ch dziesi膮tych sekundy. Czyli osiem dwadzie艣cia razy szybciej ni偶 "normalnie".

Zalety?

Szybko艣膰, bez w膮tpienia.

Wady?

Niekompatybilno艣膰 z rzadziej u偶ywanymi bibliotekami Python. Dop贸ki u偶ywamy popularnych bibliotek typu numpy, math czy pandas, jest ok, ale je偶eli si臋gniemy po jakie艣 bardziej egzotyczne importy, to kod mo偶e nie zadzia艂a膰 z PyPy.

https://xpil.eu/kto

3 komentarze

  1. Pypy bywa nawet 50 razy szybszy (patrz https://zakr.es/blog/2020/06/711-wyrazow-o-optymalizacji/ ) ale… to zale偶y od zastosowania. Je艣li oblicze艅 jest sporo, to raczej b臋dzie szybciej. Je艣li mamy co艣, co wykonuje si臋 chwil臋 i chcemy urwa膰 u艂amki sekund – niekoniecznie.
    Tak czy inaczej, do zamieszczanych tu zagadek i metody Monte Carlo – idealny.

    No i na koniec: nie trzeba zmienia膰 shebang, wystarczy wybiera膰 interpreter i podawa膰 plik jako parametr: python3 program.py lub pypy3 program.py

Leave a Comment

Komentarze mile widziane.

Je偶eli chcesz do komentarza wstawi膰 kod, u偶yj sk艂adni:
[code]
tutaj wstaw sw贸j kod
[/code]

Je偶eli zrobisz liter贸wk臋 lub zmienisz zdanie, mo偶esz edytowa膰 komentarz po jego zatwierdzeniu.