使用L1CPUCache实现c++算法的Python

Python implementation of c++ algorithm using L1 CPU Cache

本文关键字:Python 算法 c++ L1CPUCache 实现 使用      更新时间:2023-10-16

我想用分段的筛子,并使用CPU的L1缓存,实现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。

我对蟒蛇还相当陌生。

我想知道:

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

寻找答案,回答我上面所有问题的精神。欢迎提供提示。

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