2016-10-05 34 views
1

這裏,pypy是在計算速度較慢,是否給定數是素數:Sympy上PyPy - 有時6X更快,有時4X慢

C:\Users\User>python -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1)" 
10 loops, best of 3: 25.9 msec per loop 

C:\Users\User>pypy -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1)" 
10 loops, best of 3: 97.9 msec per loop 

這裏,pypy是創造素數的列表快(從1到1000000):

C:\Users\User>pypy -m timeit -n10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))" 
10 loops, best of 3: 2.12 msec per loop 

C:\Users\User>python -m timeit -n10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))" 
10 loops, best of 3: 11.9 msec per loop 

非常令人驚訝,很難理解。

「如果你想你的代碼運行速度更快,你應該只使用PyPy。」 - 吉多·範羅蘇姆(Python的創造者)

我缺少的東西?

+0

PyPy的優點對於只執行一次計算的非常簡短的示例就不會顯而易見。查看[本頁]的底部(http://pypy.org/performance.html)。 – BrenBarn

+0

您是否嘗試過多次初始計算?我嘗試了幾次,而且我總是通過'pypy'獲得(稍微)更好的時間! (如果有問題,請試用Linux Mint) –

+0

我嘗試了幾次,總是得到相同的結果。這裏有一個: – lifolofi

回答

2

isprime安裝gmpy時具有快速路徑。 gmpy已綁定到高度優化的C庫,並且可能僅安裝在CPython上。

+0

「gmpy和gmpy2依靠過多的CPython內部細節來移植到PyPy。」這是Stackoverflow上gmpy維護人員的聲明。 – lifolofi

+0

你是對的:'C:\ Windows \ system32> python -m timeit -n10 -s「from gmpy2 import is_prime」「is_prime(2 ** 521-1); is_prime(2 ** 1279-1)」 10循環,最好3:每循環29.8毫秒「 – lifolofi