J'ai continué à torturer la bète. J'ai utiliser ./nlmeans pour bencher rapidement la chose.
La fonction offset() est très utilisé forcément. En la modifiant par :
Le but est de réduire le nombre de dépendance read-after-write qui tue le parralèlisme.
J'obtient 10% de perf en plus sur le test sur processeur athlon. Par contre, cela ne change rien sur une machine pentium.
Les 3 tests qui sont dans CImg_demo qui rendent des fps sont en fait très dépendant de la vitesse d'affichage donc non représentatif pour les calculs.
J'ai essayé de modifier offset() pour que v sois la 1er dimension et non la dernière. Telle que c'est codé ici, on a 3 plans de couleur, un vert, un rouge, un bleu. Avec v en première dimension, on a R,V,B,R,V,B,R,V,B,... Cela dépend beaucoup des calculs mais je pense qu'en général, quand on utilise une couleur d'un pixel on a beaucoup de chance d'immédiatement utiliser les autres couleurs. Dans le "rangement" RVB, les 3 couleurs sont dans la même ligne de cache, donc en théorie, les acces devrait être plus rapide.
A prioris d'autre macro utilise le layout mémoire sous -entendu donc il faudrait modifier plus de chose que offset() pour faire le test.
[^] # Re: Apu updates ?
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Sortie de CImg 1.1.5. Évalué à 4.
La fonction offset() est très utilisé forcément. En la modifiant par :
return (x+width*y)+(width*height*z+width*height*depth*v);
Le but est de réduire le nombre de dépendance read-after-write qui tue le parralèlisme.
J'obtient 10% de perf en plus sur le test sur processeur athlon. Par contre, cela ne change rien sur une machine pentium.
Les 3 tests qui sont dans CImg_demo qui rendent des fps sont en fait très dépendant de la vitesse d'affichage donc non représentatif pour les calculs.
J'ai essayé de modifier offset() pour que v sois la 1er dimension et non la dernière. Telle que c'est codé ici, on a 3 plans de couleur, un vert, un rouge, un bleu. Avec v en première dimension, on a R,V,B,R,V,B,R,V,B,... Cela dépend beaucoup des calculs mais je pense qu'en général, quand on utilise une couleur d'un pixel on a beaucoup de chance d'immédiatement utiliser les autres couleurs. Dans le "rangement" RVB, les 3 couleurs sont dans la même ligne de cache, donc en théorie, les acces devrait être plus rapide.
A prioris d'autre macro utilise le layout mémoire sous -entendu donc il faudrait modifier plus de chose que offset() pour faire le test.
"La première sécurité est la liberté"