-2

我正在编写一个 python 脚本,它基本上使用很长的 mpz 整数(来自 gmpy2 库)和一些小列表。除了其他典型的“pythonic”代码优化之外,我还尝试通过使用 set_cache 函数来减少脚本内计算所需的时间(基本上,它们是来自 gmpy2 的“mul”、“add”、“sub”计算)好吧,但是即使将其设置为最大值,即 set_cache(1000,16384),我也看不出使用或不使用它有什么区别,大整数的时间是相同的。

如果有人对 get_cache 的使用或哪种操作更好地设置它有经验,我会很感激一些信息。我只知道官方 gmpy 页面对此有何评论(非常基本),并且在互联网上搜索该方法并没有提供任何有趣的示例(至少我还没有找到它们)

4

1 回答 1

0

我是gmpy2的维护者。

由缓存控制set_cache()get_cache()减少创建新mpz实例所需的时间。这种改进仅对中等大小的整数是可测量的。一旦开始处理非常大的数字,计算的运行时间就会比对象创建时间长得多,缓存的影响可以忽略不计。

如果缓存算法没有限制缓存对象的大小,您也可以消耗所有系统内存。这是一个非常早期的 alpha 版本的问题。

这些函数主要用于测试。减少或禁用缓存对于内存有限的系统可能很有用。通常,调整缓存大小并没有太多好处。

由于您没有提供任何代码或识别您的操作系统,我只能提供一些通用的性能调整建议。

  1. 使用*+-运算符代替mul()add()sub()。操作员的开销会更少。
  2. 尽量减少 Pythonlong和 gmpy2mpz类型之间的转换次数。
  3. 为您的特定处理器编译gmpy2。不幸的是,这在 Windows 上可能具有挑战性。
于 2015-01-20T06:36:11.740 回答