[英]Any way to speed up Python long int bitwise operation?
我正在用Python編寫國際象棋程序,我使用python-chess進行電路板表示和移動生成等。它通常非常好,並且具有非常有用的功能。
但是,由於它是純Python,它現在是我的AI的瓶頸。 Python長整數及其按位運算廣泛用於模塊中,例如
x = b & -b
b ^= x
if not x & 0xffffffff:
x >>= 32
r |= 32
有沒有辦法在Python中加速這種操作,可能還有其他一些模塊? 沒有在C或Fortran中重寫是否可能? 我嘗試了numba包,但它似乎無法編譯python long int。
非常感謝。
我維護gmpy2庫,它支持通常比Python的本機整數更快的整數操作。
這是一個簡單的例子:
In [3]: x=12345678901234567890
In [4]: %timeit y=x;y>>=32
10000000 loops, best of 3: 113 ns per loop
In [5]: x=gmpy2.mpz(x)
In [6]: %timeit y=x;y>>=32
10000000 loops, best of 3: 71.9 ns per loop
mpz
類型的行為幾乎與Python相同,因此它應該是直接替代品。 gmpy2
還支持一個名為xmpz
的可變整數類型。 它支持直接位操作,對於就地操作可能更快。
In [9]: x=gmpy2.xmpz(0)
In [10]: bin(x)
Out[10]: '0b0'
In [11]: x[4]=1
In [12]: bin(x)
Out[12]: '0b10000'
要使用xmpz
類型的所有性能優勢,您可能需要修改邏輯和/或代碼。
嘗試使用此軟件包: https : //pypi.python.org/pypi/bitarray
它是C代碼的Python接口,旨在加速逐位操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.