Распараллелить цикл while с OpenMP

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

int main()
{
  char buffer[BUFFER_SIZE];
  while(fgets(buffer, BUFFER_SIZE, stdin))
  {
    fgets(buffer, BUFFER_SIZE, stdin);
    do_some_simple_processing_on_the_second_line_of_the_record(buffer);
    fgets(buffer, BUFFER_SIZE, stdin);
    fgets(buffer, BUFFER_SIZE, stdin);
  }
  print_out_result();
}

При этом, конечно, не учитываются некоторые детали (работоспособность / проверка ошибок и т. Д.), Но это не имеет отношения к вопросу.

Программа работает нормально, но файлы данных, с которыми я работаю, огромны. Я решил, что попытаюсь ускорить программу, распараллеливая цикл с помощью OpenMP. Однако после небольшого поиска выясняется, что OpenMP может обрабатывать только циклы для , где количество итераций известно заранее. Поскольку я заранее не знаю размер файлов и даже простые команды, такие как wc -l , требуют много времени для выполнения, как я могу распараллелить эту программу?

9
задан Daniel Standage 23 September 2011 в 16:24
поделиться