我正在寻找使用分段筛子和使用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很新。
我想知道:
寻找能够回答上述所有问题精神的答案。欢迎提示和提示。
答案 0 :(得分:1)
我不确定您是否可以对Python如何使用内存做出足够的假设,以确保它有效地使用L1缓存。 此外,10 ^ 8仅为1/2 Gig,因此您的当前实现在元素分配方面必须非常低效。 你可能最好创建最大可能的字符串,并将其编入索引存储,而不是使用整数数组,如果你只想在每个位置存储一个标志? 当然可以使用字符串作为分段筛存储,如果幸运的话,它们可能小到可以存在于L1缓存中。 C有一些很好的位索引和操作,我确信它在python中可用,允许你独立操作每个位。你可以对字符值进行一些操作。