Je regarde le code désassemblé avec objdump et je n'y comprends rien. Pour find_int_c le code machine est exactement le même entre default et core2, à partir de haswell add 0ドルx1,%rcx est remplacé par inc %rcx mais ce n'est pas ce qui fait la différence. Pareil pour find_int_sse2, à partir de sandybridge les instructions SSE2 sont remplacées par leurs équivalents AVX, mais il n'y a aucune différence entre broadwell et skylake. Des idées sur ce qui peut se passer ?
Pour la boucle déroulée sur core2, au moins je vois des différences : des instructions sont réordonnées par rapports aux autres architectures.
[^] # Re: -march
Posté par Clément V . En réponse au journal Recherche de valeur dans un tableau et l'écosystème des compilateurs C++. Évalué à 2.
Chez moi la valeur par défaut est
x86-64(amd64 avec extensions jusqu'à sse2 si j'ai bien compris).Mes résultats plus détaillés sont :
Je regarde le code désassemblé avec objdump et je n'y comprends rien. Pour
find_int_cle code machine est exactement le même entre default et core2, à partir de haswelladd 0ドルx1,%rcxest remplacé parinc %rcxmais ce n'est pas ce qui fait la différence. Pareil pourfind_int_sse2, à partir de sandybridge les instructions SSE2 sont remplacées par leurs équivalents AVX, mais il n'y a aucune différence entre broadwell et skylake. Des idées sur ce qui peut se passer ?Pour la boucle déroulée sur core2, au moins je vois des différences : des instructions sont réordonnées par rapports aux autres architectures.