2^30 個の符号なし 32 ビット整数値を含むファイルがあり、それらを並べ替える必要があるため、それを行うための最速のアルゴリズムを作成したいと考えています。利用可能なすべてのプロセッサを使用する必要があり、256MB を超えるメモリを使用しないでください。
今思うこと: 最大 int 値 (32 ビット整数の場合) Sm= 2^32、最低 = 0。使用可能なメモリは M=2^28 です。
の出力ファイルを分割
Sm*(整数のサイズ)/M = 2^32*2^5/2^28 = 2^9 パーツ; 各パーツのサイズ 2^32/2^9 = 2^23.
まず、入力ファイルから int 値を読み取り、それがどの範囲にあるかをチェックし、この範囲の整数で一時ファイルに入れる単純なリーダーを作成します。その後、2^9 個のファイルが作成されます。
1 file= Integers from 0:2^23
2 file = 2^23:2^24
3 file = 2^24:(2^24+2^23),
and etc...
- qsort やピラミッド ソートなどの標準アルゴリズムでソートを行います (このアルゴリズムに関するアドバイスはありますか?)
ここでは並列ソートのために Python.multiprocessing のようなものを使用できますが、各プロセスが開始する前に使用可能な空きメモリを安全に計算する必要があります
このアプローチについてどう思いますか?よりクリーンで簡単なソリューションが存在する可能性がありますか?