c++: как оптимизировать ввод-вывод?

. ] Я работаю над математической задачей, которая имеет то преимущество, что может «предварительно вычислить» около половины задачи, сохранить эту информацию в файл, а затем повторно использовать ее много раз для вычисления различных «экземпляров» моей задачи. Сложность в том, что загрузка всей этой информации для решения актуальной проблемы является основным узким местом.

Более конкретно: Я могу предварительно вычислить огромное количество информации — тонны вероятностей ( long double), тонну std::mapи многое другое — и сэкономить все это добро на диск (несколько Гб).

Вторая половина моей программы принимает входной аргумент D. Для каждого Dмне нужно выполнить очень много вычислений, которые включают комбинацию предварительно вычисленных данных (из файла) и некоторых других данных, специфичных для D(так что что проблема различна для каждого D).

Иногда мне нужно будет выбрать из файлов определенные фрагменты предварительно вычисленной информации. В других случаях мне нужно будет загрузить каждую часть данных из (большого) файла.

Существуют ли способы ускорить ввод-вывод?

Я уже распараллелил программу (MPI, через boost::mpi) по другим причинам, но тем не менее доступ к файлам на диске делает время вычислений невыносимым.

Какие-нибудь стратегии или оптимизации?

В настоящее время я делаю все с cstdio, т.е. без iostream. Будет ли это иметь большое значение?

16
задан cmo 5 April 2012 в 14:26
поделиться