有没有办法加速Python长整型位运算?

有没有办法加速Python长整型位运算?,python,bit-manipulation,Python,Bit Manipulation,我正在用Python编写一个国际象棋程序,用于棋盘表示和移动生成等。它通常非常好,具有非常有用的功能 然而,因为它是纯Python的,所以它现在是我的AI的瓶颈。Python长整数及其按位操作在模块eg中广泛使用 x = b & -b b ^= x if not x & 0xffffffff: x >>= 32 r |= 32 在Python中,是否有其他模块可以加速这种操作?不使用C或Fortran重写是否可能?我尝试了这个包,但它似乎无法编译p

我正在用Python编写一个国际象棋程序,用于棋盘表示和移动生成等。它通常非常好,具有非常有用的功能

然而,因为它是纯Python的,所以它现在是我的AI的瓶颈。Python长整数及其按位操作在模块eg中广泛使用

x = b & -b
b ^= x

if not x & 0xffffffff:
    x >>= 32
    r |= 32
在Python中,是否有其他模块可以加速这种操作?不使用C或Fortran重写是否可能?我尝试了这个包,但它似乎无法编译python long int

非常感谢。

尝试使用此软件包:

它是C代码的Python接口,旨在加速逐位运算。

我维护该库,它支持通常比Python的本机整数更快的整数运算

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'
下面是一个简单的例子:

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 long相同,因此它应该是直接替换
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
类型的所有性能优势,您可能需要修改您的逻辑和/或代码。

您看过cython、numpy f2py等吗?@PadraicCunningham我只能编写非常基本的C/Fortran,因此希望先看看是否可以不用自己编写它们。您不必编写C来使用cython,这就是它为您完成所有工作的要点。使用PyPy。或者,如果可能的话,使用Numpy@TonySuffolk66作为问题中的OP状态,以这种方式实现的是模块,而不是OP的代码。作为
python chess
的作者,它在CPython上的速度慢了5倍。有趣的是,python chess的作者在文档中说的正是这一点。