Je me demandais quelle était l'influence de -march=... pour ce genre d'algo. J'ai testé ton benchmark chez moi (i5-9600k) avec g++ seulement (la flemme d'installer d'autres compilateurs). Sans changer les options, je trouve des résultats similaires aux tiens sauf que benchmark_cpp est plus rapide que benchmark_c_unrolled.
Avec -march=native ou -march=skylake, benchmark_c devient aussi bon que benchmark_c_unrolled. benchmark_c_unrolled et benchmark_cpp ne bougent pas. benchmark_sse2 devient plus lent ! (plus lent que benchmark_cpp mais toujours plus rapide que benchmark_c_unrolled)
Avec -march=core2, benchmark_c est tout autant accéléré, benchmark_c_unrolled va encore un peu plus vite, benchmark_cpp et benchmark_sse2 sont aussi rapide que sans l'option.
Donc -march est bien important, mais g++ ne semble pas très bon pour les architectures récentes et sabote même l'algo sse2.
# -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é à 5.
Je me demandais quelle était l'influence de
-march=...pour ce genre d'algo. J'ai testé ton benchmark chez moi (i5-9600k) avec g++ seulement (la flemme d'installer d'autres compilateurs). Sans changer les options, je trouve des résultats similaires aux tiens sauf quebenchmark_cppest plus rapide quebenchmark_c_unrolled.Avec
-march=nativeou-march=skylake,benchmark_cdevient aussi bon quebenchmark_c_unrolled.benchmark_c_unrolledetbenchmark_cppne bougent pas.benchmark_sse2devient plus lent ! (plus lent quebenchmark_cppmais toujours plus rapide quebenchmark_c_unrolled)Avec
-march=core2,benchmark_cest tout autant accéléré,benchmark_c_unrolledva encore un peu plus vite,benchmark_cppetbenchmark_sse2sont aussi rapide que sans l'option.Donc
-marchest bien important, mais g++ ne semble pas très bon pour les architectures récentes et sabote même l'algo sse2.