• # += pdf multiplication

    Posté par . En réponse au message Parallelisation d'une boucle (théoriquement) trivialement parallélisable. Évalué à 4.

    « Le compilateur n'est-il pas assez intelligent pour remarquer que c'est la même chose ? »

    Ça n’est pas tout à fait la même chose :a += b + c ⇔ a = a + (b + c)

    a = a + b + c ⇔ a = (a + b) + c
    Il est possible que certains compilateurs fassent la distinction pour des raisons de précision numérique.

    Par contre je ne sais pas pourquoi ça impacterait les performances... si tu mets explicitement des parenthèses (dans les deux cas) ça change quelque chose ?

    Pour les questions d’optimisations j’avais trouvé la lecture de [http://www.agner.org/optimize/optimizing_cpp.pdf] très instructive.

    Mais j’ai constaté le même phénomène que toi, pour les « petites » (petite sur le nombre de ligne d’une itération, pas le nombre d’itération) boucles la parallélisation n’apporte aucun gain : sur-charge pour la gestion des threads (création ou réveil), mais surtout les boucles déjà optimisées qui partent en SIMD (surtout dans ton cas).

    Petite question au passage : est-ce que mettre yvar2[i] = yvar2[i] + (yvar3[i] + yvar3[i]);pour la deuxième ligne change quelque chose (avec et sans les parenthèses) ?