Le 13 septembre 2018 à 22:12:02 godrik a écrit :
Quelques questions:
Les valeures de w, h, et nbc ressemble a quoi?
Tu fais tourner ca sur quel type de machine?
C'est un flou gaussien que tu fais, non ?
Une raison de ne pas utiliser halide pour faire ca ?
Quelques remarques:
La deuxieme boucle for a(ligne 30) est une boucle de memcpy en fait. Je remplacerais les boucles lignes 32 et 34 par un seul memcpy. En supposant que la libc est bien ecrite sur ton systeme.
La premiere boucle sur a (ligne 1) semble completement parallele
Tu peux calcler nbadd a partir des offmin et offmax au lieu de les compter explicitement.
Donne toujours un schedule a ta boucle openmp. Le defaut du compilateur pourrait etre stupide.
Le speedup que tu as ressemble a quoi?
w et h sont entre 2000 et 4500 (dimensions)
La machine est un vieux pentium à 2 coeurs, j'ai pas mieux pour l'instant
C'est un flou gaussien/lisseur effectivement 
Je ne connaissais pas halide mais l'algorithme est un pretexte pour m'entrainer sur OMP
Je m'étais fait la même remarque sur les boucles L30 et j'avais tenté un std::copy en vain. j'ai retenté avec un memcpy( rowP[a] , final[a], w*nbc*sizeof *final[a] ) qui ne fonctionne pas non plus mais je n'arrive pas à trouver pourquoi.
Je m'étais concentré sur la boucle de la ligne 1 qui me semble la plus importante et la plus gourmande et j'ai tenté de mettre le plus de variables possibles en private mais pas d'augmentation..
Je rajoute un schedule à chaque pragma selon ton conseil, me conseil tu de laisser le paramètre runtime ou de forcer avec un "dynamic" ou "guided" (par experience les plus efficaces selon moi)
Je n'ai pas encore calculé de speed up, je divise le temps par 2 à vu de nez actuellement. Je sais qu'on ne peut pas faire de magie mais je susi convaincue de pouvoir faire mieux.