Paralléliser boucle while avec OpenMP

J'ai un très grand fichier de données, et chaque enregistrement dans ce fichier de données a 4 lignes. J'ai écrit un très simple C programme pour analyser des fichiers de ce type et d'imprimer des informations utiles. L'idée de base du programme de cette.

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();
}

Bien sûr, cela laisse de côté certains détails (la santé mentale/vérification des erreurs, etc), mais ce n'est pas pertinente à la question.

Le programme fonctionne très bien, mais les fichiers de données avec lesquelles je travaille sont énormes. J'ai pensé que je voudrais essayer d'accélérer le programme par la parallélisation de la boucle avec OpenMP. Après un peu de recherche, cependant, il semble que OpenMP ne peut gérer que for boucles d'où le nombre d'itérations est de savoir à l'avance. Car je ne sais pas la taille des fichiers à l'avance, et même de simples commandes comme wc -l prendre du temps pour s'exécuter, comment puis-je paralléliser ce programme?

OriginalL'auteur Daniel Standage | 2011-09-23