繁体   English   中英

使用L1 CPU缓存的c ++算法的Python实现

[英]Python implementation of c++ algorithm using L1 CPU Cache

我正在寻找使用分段筛子并使用CPU的L1 Cache来实现Eratosthenes筛子的python实现的方法。

我在github上有自己的版本: https : //github.com/nick599/PythonMathsAlgorithms/blob/master/segmented_soe_v6.py ,它不使用CPU的L1缓存大小。

我找到了以下站点-http://primesieve.org/segmented_sieve.html ,该站点提供了使用L1缓存大小的C ++实现。 它说它比我的算法快得多(我的算法花了几分钟来创建高达10 ^ 7的素数,并且由于内存使用情况而挂在10 ^ 8上)。

我正在Linux Mint v17上进行开发,python版本:2.74。 更新我的CPU是Intel i7。

我是python的新手。

我想知道:

  1. 我如何开始实现此C ++算法的python版本?
  2. 我需要考虑什么?
  3. C ++实现中是否存在无法在Python 2.74中编码的东西?
  4. 那多线程呢?
  5. 那超线程呢?
  6. python的GIL呢?

寻找答案,以回答以上所有问题的精神。 欢迎提示和技巧。

我不确定您是否可以对Python如何使用内存做出足够的假设,以确保它有效地使用L1缓存。 另外,10 ^ 8仅为1/2 Gig,因此您当前的实现在元素分配方面必须非常低效。 您最好创建尽可能大的字符串,并将其索引为筛存储,而不是如果只打算在每个位置存储单个标志,则不使用整数数组? 当然,可以将字符串用作分段筛存储,如果幸运的话,它们可能足够小,可以驻留在L1高速缓存中。 C有一些不错的位索引和操作,我相信python中提供了这些功能,可以让您独立地操作每个位。 您可以对字符值进行位操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM