2017-10-31 14 views
0

Eratosthenesのふるいを分割したふるいで、CPUのL1キャッシュを使用してPythonで実装する方法を検討しています。L1 CPUキャッシュを使用したC++アルゴリズムのPython実装

githubに私自身のバージョンがあります:https://github.com/nick599/PythonMathsAlgorithms/blob/master/segmented_soe_v6.py、これはCPUのL1キャッシュサイズを使用しません。

L1キャッシュサイズを使用してC++実装を提供する次のサイト - http://primesieve.org/segmented_sieve.htmlが見つかりました。それは私のアルゴリズムよりもはるかに高速であると言います(私は10^7までの素数を作るのに数分かかり、メモリー使用のために10^8にハングアップします)。

私はLinux Mint v17、python version:2.74で開発しています。 更新私のCPUはIntel i7です。

私はかなり新しいpythonです。

私が知りたい:

  1. を、私はこのC++アルゴリズムのPythonのバージョンを実装し始めることができる方法は?
  2. 私は何を考慮する必要がありますか?
  3. Python 2.74でコーディングできないものはC++実装にありますか?
  4. マルチスレッドはどうですか?
  5. ハイパースレッディングはどうですか?
  6. pythonのGILはどうですか?

上記のすべての質問の精神に答える答えを探してください。ヒントやヒントを歓迎します。

答えて

1

PythonがL1キャッシュを効率的に使用するために、どのようにメモリを使用するかについて十分な前提を立てることはできません。 また、10^8は1/2ギガバイトに過ぎないので、現在の実装は、要素の割り当てがかなり効率的でなければなりません。 各位置に単一のフラグを格納するだけの場合は、可能な限り大きな文字列を作成し、それを篩ストレージとして索引付けするほうがよいでしょうか? セグメント化されたシーブストレージとして文字列を使用することは確かに可能です。運が良ければ、L1キャッシュには十分に小さいかもしれません。 Cには良いビット索引付けと操作があります。これはPythonで各ビットを独立して操作できるようになっています。文字の値に対してビット操作を行うことができます。

関連する問題