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

时间:2017-10-31 18:42:43

标签: python c++ python-2.7 sieve-of-eratosthenes

我正在寻找使用分段筛子和使用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。

我对python很新。

我想知道:

  1. 如何开始实现此C ++算法的python版本?
  2. 我需要考虑什么?
  3. C ++实现中是否存在无法在Python 2.74中编码的内容?
  4. 多线程怎么样?
  5. 超线程怎么样?
  6. python' GIL怎么样?
  7. 寻找能够回答上述所有问题精神的答案。欢迎提示和提示。

1 个答案:

答案 0 :(得分:1)

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