簡體   English   中英

有什么方法可以加速Python long int按位運算?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM