問題の約半分を「事前計算」し、この情報をファイルに保存し、それを何度も再利用して問題のさまざまな「インスタンス」を計算できるという利点がある数学の問題に取り組んでいます。問題は、実際の問題を解決するためにこのすべての情報をアップロードすることが大きなボトルネックになることです。
より具体的には、膨大な量の情報 (大量の確率 ( long double
)、大量の など) を事前に計算し、std::map<int,int>
これらすべてをディスク (数 Gb) に保存できます。
プログラムの後半は、入力引数Dを受け入れます。Dごとに、事前に計算されたデータ (ファイルから) とDに固有のその他のデータの組み合わせを含む非常に多くの計算を実行する必要があります(そのため、問題はDごとに異なります)。
ファイルから事前に計算された情報の特定の部分を選択する必要がある場合があります。また、(大きな) ファイルからすべてのデータをアップロードする必要がある場合もあります。
IO を高速化するための戦略はありますか?
boost::mpi
他の理由で既にプログラムを並列化 (MPI、経由) していますが、ディスク上のファイルにアクセスすると、計算時間が耐えられなくなります。
戦略や最適化はありますか?
現在、私はすべてをcstdio
、つまり noで行っていますiostream
。それは大きな違いを生むでしょうか?