3

ルックアップテーブルとして使用するには、10^104バイトの整数の配列が必要です。RAMにロードするには40GBかかりますが、これは現実的ではありません。初期化された後は、この配列に書き込む必要はありません。単一のプロセスの複数のスレッドから同時に、この配列のランダムな場所から個々の整数値を読み取る必要があります。64ビットプラットフォームを使用することが保証されています。このルックアップテーブルの最速の実装は何ですか?通常のファイル読み取り機能を使用しますか、それともメモリマップトファイルをブーストしますか?

4

2 に答える 2

1

明示的な読み取りを行う必要があるようです。

メモリマッピングは、一度に大量のページを取り込み(Windowsは256KiBを実行すると思いますが、他のプラットフォームについてはわかりません)、最初からペナルティなしでそれらに再アクセスできるようにすることで速度を上げます。

ランダムな場所から整数を読み取るだけの場合は、1ページからわずか4バイトで256KBを読み取ることになり、おそらく再アクセスすることさえありません。このような廃棄物!また、他のアプリやファイルシステムキャッシュから多くの有用なデータをページアウトしたことも考慮してください。

于 2012-02-13T21:34:11.130 に答える
1

ファイルが作成されると、読み取り専用の方法でアクセスするだけでよいので、メモリマップトファイルやBoostなどの費用は必要ないと思います。同じデータに同時にアクセスしたい複数のプロセスがある場合、これはより便利です。あなたの場合、読み取り専用のスレッドがあるので、単純な40gファイルが最も単純で最速であるはずです。

于 2012-02-13T21:35:41.130 に答える