Самый быстрый способ записи данных при их производстве

В своей программе я моделирую систему N-тел для большого числа итераций. Для каждой итерации я получаю набор из 6N координат, которые мне нужно добавить в файл и затем использовать для выполнения следующей итерации. Код написан на C++ и в настоящее время использует метод ofstream write() для записи данных в двоичном формате на каждой итерации.

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

Я в замешательстве, потому что у меня нет опыта в реальном параллельном программировании и низкоуровневом файловом вводе-выводе. Я подумал о некоторых абстрактных методах, которые, как мне кажется, я мог бы реализовать, поскольку я программирую для современных (возможно, многоядерных) машин с ОС Unix:

  • Запись данных в файл кусками по n итераций (кажется, есть лучшие способы... )
  • Распараллеливание кода с помощью OpenMP (как на самом деле реализовать буфер, чтобы потоки синхронизировались должным образом и не перекрывались?)
  • Использование mmap (размер файла может быть огромным, порядка гигабайта, достаточно ли надежен этот подход)?

Однако я не знаю, как их лучше реализовать и правильно сочетать.

7
задан Lightness Races with Monica 3 January 2012 в 16:16
поделиться