Problem with omp schedule(guided) if construct

Problem with omp schedule(guided) if construct

My intention for the following omp construct is that more than one thread  will be used only if (n>64)

size_t n=array.size();
#pragma omp parallel for schedule(guided) if(n>64)
for(size_t i=0;i<n;i++){

// do stuff with array[i]

}

On a 6 core machine, I found that my code was "hanging" reproducibly.

When I debugged the code (debug mode, no optimization on.) I found that

  • one of threads was still processing.
  • the other threads had completed, it seemed.
  • Looking at the variables in the "problem thread" showed that i>n ( out of bounds!), although i was not increasing. That , from my understanding, should not be possible.
  • I think there is a bug in the implementation of this contstruct ( Intel Compiler 13.1) in that it is allowing the for index to be "out of bounds"
  • If I remove the "schedule(guided) if(n>64)" all issues go away
  • I have checked the code with Intel Inspector XE for other threading issues, it came away "clean".

 

2 posts / 0 nouveau(x)
Dernière contribution
Reportez-vous à notre Notice d'optimisation pour plus d'informations sur les choix et l'optimisation des performances dans les produits logiciels Intel.

Could you please share a bit more details on the problem, so that we would be able to reproduce it and understand the reason.

E.g. what is array size in your hanging example, which OS you are using? If possible, please provide the complete test case.
I tried to create an example from your pattern, and it works fine for me (I used n=128, compiler version 13.1.0.149 on Windows).

Thanks,
Andrey

Laisser un commentaire

Veuillez ouvrir une session pour ajouter un commentaire. Pas encore membre ? Rejoignez-nous dès aujourd’hui