簡體   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