Распараллелить цикл 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 может обрабатывать толькоfor
циклы, где количество итераций известно заранее. Поскольку я не знаю размер файлов заранее, и даже такие простые команды, какwc -l
займет много времени, как я могу распараллелить эту программу?