Я работаю над математической проблемой, которая имеет то преимущество, что она может "предварительно вычислить" примерно половину проблемы, сохранить эту информацию в файл и затем повторно использовать ее много раз, чтобы вычислить различные "экземпляры" моей проблемы, Трудность заключается в том, что загрузка всей этой информации для решения актуальной проблемы является основным узким местом.
Более конкретно:
Я могу предварительно вычислить огромное количество информации - тонны вероятностей (long double
), тонну std::map<int,int>
и многое другое - и сохранить все это на диск (несколько Gb).
Вторая половина моей программы принимает входной аргумент D. Для каждого D мне нужно выполнить большое количество вычислений, которые включают комбинацию предварительно вычисленных данных (из файла) и некоторые другие данные, которые являются специфическими для D (так что проблема различна для каждого D).
Иногда мне нужно будет выделить определенные фрагменты предварительно вычисленной информации из файлов. В других случаях мне нужно будет загрузить каждую часть данных из (большого) файла.
Существуют ли какие-либо стратегии для ускорения ввода-вывода?
У меня уже есть программа, параллельная (MPI, через boost::mpi
) по другим причинам, но независимо от того, что доступ к файлам на диске делает мое время вычисления невыносимым.
Любые стратегии или оптимизации?
В настоящее время я делаю все с cstdio
, т.е. no iostream
. Будет ли это иметь большое значение?