GCC 13 bude s -O2 rozvíjet malé smyčky pro x86

14. 11. 2022

Sdílet

GCC Autor: GNU

Možnost překladače GCC rozvíjet smyčky -funroll-loops či dokonce -funroll-all-loops může někdy pomoci s rychlostí výsledného kódu, ale téměř vždy je výsledný kód delší, proto se používá zřídka nebo s velkým rozmyslem.

Hongyu Wang z Intelu si myslí, že rozvíjet malé smyčky má na x86 vždy smysl vzhledem k velkému dekodéru mikroinstrukcí. Například Zen 3 a Icelake mají dekodér pro 5 mikroinstrukcí. Dává tedy smysl rozvinout všechny malé smyčky do 4 instrukcí včetně, pokud je zároveň zapnuto -O2. Záplata byla poslána do GCC 13, stabilní vydání očekáváme v příštím roce na jaře.

Ve SPEC testu 548.exchange2 (sudoku) se nové rozvíjení malých smyček projeví nárůstem rychlosti o 7–9 % s jen 0,9 % nárůstem velikosti kódu. Například linuxové jádro se zvětší jen o 0,06 %, patrně tedy obsahuje jen minimum malých smyček.

Pokud chcete rozvíjení malých smyček zkusit již teď na starším GCC, lze použít parametry -O2 -funroll-loops --param  max-unrolled-insns=4 --param max-unroll-times=2. Výchozí parametry pro -funroll-loops jsou daleko vyšší a to 200 a 8, jak se můžete přesvědčit pomocí  gcc --help=param -Q | grep unroll.

(zdroj: phoronix)

Našli jste v článku chybu?

Autor zprávičky

První linux nainstaloval kolem roku 1994 a u něj zůstal. Později vystudoval fyziku a získal doktorát.