.
J'ai envoyer un e-mail à l'OpenMP les développeurs sur ce sujet, la réponse :
Pour la signature de l'int, l'écharpe autour de comportement est indéfini. Si nous le permettent !=, les programmeurs peuvent obtenir inattendu tripcount. Le problème est de savoir si le compilateur peut générer du code pour le calcul d'un voyage de comptage de la boucle.
Pour une simple boucle, comme:
for( i = 0; i < n; ++i )
le compilateur peut déterminer qu'il existe des 'n' itérations, si n>=0, et zéro itérations si n < 0.
Pour une boucle comme:
for( i = 0; i != n; ++i )
encore une fois, un compilateur doit être en mesure de déterminer qu'il existe des 'n' itérations, si n >= 0; si n < 0, nous ne savons pas combien d'itérations.
Pour une boucle comme:
for( i = 0; i < n; i += 2 )
le compilateur peut générer du code pour calculer le voyage count (nombre d'itérations de la boucle) floor((n+1)/2) si n >= 0, et 0 si n < 0.
Pour une boucle comme:
for( i = 0; i != n; i += 2 )
le compilateur ne peut pas déterminer si " je " ne sera jamais hit 'n'. Si " n " est un nombre impair?
Pour une boucle comme:
for( i = 0; i < n; i += k )
le compilateur peut générer du code pour calculer le voyage comte de floor((n+k-1)/k) si n >= 0, et 0 si n < 0, car le compilateur sait que la boucle doit compter jusqu'; dans ce cas, si k < 0, c'est pas un programme OpenMP.
Pour une boucle comme:
for( i = 0; i != n; i += k )
le compilateur ne sait même pas si je compte vers le haut ou vers le bas. Il ne sait pas si " je " ne sera jamais hit 'n'. Il peut être une boucle infinie.
Credites: OpenMP CEA