私は最適化問題を解決するためにCでプログラムを書いています。そのためには、10個の13要素の次数を持つfloat型の配列を作成する必要があります。20GBのメモリを搭載したマシンでこれを行うことは実際に可能ですか?
2 に答える
CのAfloat
は4バイトを占有します(IEEE浮動小数点演算を想定しています。これは現在のユニバーサルにかなり近いものです)。つまり、1013個の要素は単純に4×10個の13バイトのスペースを必要とします。これはかなりの量です(40 TB、デスクトップシステム用のディスクはかなり多く、RAMに関しては、ほとんどの人が購入できるよりも多い)ので、別のアプローチを見つける必要があります。
データはまばらですか(つまり、ほとんどがゼロ)?そうである場合は、ハッシュテーブルまたはツリーを使用して、他の値のみを格納してみてください。データが十分にまばらである場合は、すべてを収めることができます。また、1013要素の処理には非常に長い時間がかかることに注意してください。1秒間に10億個のアイテムを処理できたとしても(非常に高速で、今でも)、10〜4秒(数時間)かかります。重要な状況では、処理できないことは間違いありません。その速度に近いものを取得します。データストレージだけでなく処理もスパースにして、大量のゼロをそのままにしておく方法を見つけることができますか?
もちろん、データがスパースでない場合、あなたは運命にあります。その場合、代わりに、より小さく、より扱いやすい問題を見つける必要があるかもしれません。
スワップスペースが多い64ビットマシンを使用している場合は、サイズ10 ^ 13の配列を宣言するだけで、機能する可能性があります。
ただし、このサイズのデータセットの場合、問題の性質を慎重に検討することが重要になります。すべての10^13要素に対してランダムアクセスの読み取りおよび書き込み操作が本当に必要ですか?アレイはまったくまばらですか?これをマップ/リデュースの問題として表現できますか?その場合、10 ^ 13要素への順次アクセスは、ランダムアクセスよりもはるかに実用的です。