GCC 4.8.5 vs 8.3.0

írta: weiss, 5 éve

Ügyesek ezek a fordító író srácok.

| -O3 | -O0 | speedup |
---------------------------------------------------------------
gcc version 4.8.5 inline SSE2 | 622 | 2 356 | |
gcc version 4.8.5 naive | 3 950 | 21 068 | |
gcc version 8.3.0 inline SSE2 | 573 | 3 617 | 1,78 | 1,07 |
gcc version 8.3.0 naive | 460 | 34 694 | 14,14 | 1,00 |

Egy projektemet írtam át C++-ra, és tűnt fel, hogy mikor az algoritmus egyszerű for ciklusos implementációját teszteltem, az gyorsabb volt, mint az SSE2 intrinsic kód. Régen biztos nem ilyen volt, szóval kipróbáltam régebbi fordítóval is, és lám, tényleg. Az -O0 naív verziót használtam viszonyítási alapnak, mert nem ugyanazon a gépen teszteltem, de mindkettő egy Sandy Bridge-es Intel volt. A számok ezredmásodpercben vannak megadva. Szépen látható, hogy felismeri, mit szeretnék csinálni /abszolút különbségek összegét számolok/, és használja a hozzá való vektorutasítást. Össze akartam nézni a generált ASM kódot, de szinte teljesen más volt a kettő, szóval sokat nem segített, hogy megértsem, mit csinál másképp.