メモリに完全にロードできず、ランダムにアクセスされる非常に大きなメモリマップトファイル(200GB以上)を扱っています。マップされたファイルはソリッドステートドライブアレイに保存されますが、同じ検索が以前に行われ、使用されたページがすでにメモリに読み込まれていない限り、必要なパーツに一度に1つずつアクセスするのは非常に遅いことがわかります。
mmapの変数を読み取るために複数のスレッドを同時に追加すると、速度が劇的に向上し、テストの向上の上限に達することができませんでしたが、スレッドが1000を超えると、openmpがリソース使用不可エラーをスローします。
また、madviseを試して、必要となる特定の部分(MADV_WILLNEED)をカーネルにアドバイスしようとしましたが、カーネルは、違いを生むのに十分な速さでアドバイスに基づいて動作していないようです。
実際に使用される直前に必要なデータの部分を同時にプリフェッチする方法を探しています。変数(または変数を含むマップされたファイルのメモリページサイズの部分)を読み取るためのリソースを最も消費しない方法は、読み取りをブロックせずに変数をメモリに強制することです。
ブロッキングを回避できない場合は、非常に多数の非常に軽量なスレッドを実行して読み取りを行う方法も機能します。