Czy istnieje sposób na powiedzenie clang, aby rozwinąć określoną pętlę?clang: Rozwijanie pętli siły dla określonej pętli
Wyszukiwanie w Google daje mi dostęp do opcji wiersza poleceń, które będą miały wpływ na całą kompilację, a nie na pojedynczą pętlę.
Jest podobne pytanie dla GCC --- Tell gcc to specifically unroll a loop --- ale odpowiedź pod warunkiem, że nie działa z brzękiem.
Wariant 1 sugerowane tam:
#pragma GCC optimize ("unroll-loops")
wydaje się być zignorowane. W rzeczywistości
#pragma GCC akjhdfkjahsdkjfhskdfhd
jest również cicho ignorowana.
Opcja 2:
__attribute__((optimize("unroll-loops")))
skutkuje ostrzeżeniem:
warning: unknown attribute 'optimize' ignored [-Wattributes]
Aktualizacja
joshuanapoli zapewnia miły rozwiązanie jak iteracyjne za pośrednictwem szablonu metaprogramowanie i C + +11 bez tworzenia pętli. Konstrukt zostanie rozwiązany podczas kompilacji, w wyniku czego pojawi się wielokrotnie podkreślona bryła. Chociaż nie jest to dokładnie odpowiedź na to pytanie, zasadniczo osiąga to samo.
Dlatego właśnie akceptuję odpowiedź. Jeśli jednak wiesz, jak używać standardowej pętli C (for
, while
) i wymusić rozwinięcie - proszę podziel się z nami wiedzą!
Zwykle kompilator ma bardzo dobre pojęcie o tym, kiedy można rozwinąć pętlę i kiedy nie jest to dobry pomysł.Jaki jest specjalny przypadek, który próbujesz rozwiązać, jeśli nie ma to zastosowania? –
Nie może * wymuszać * rozwijania, ale '__attribute__ ((hot)) może być warte wypróbowania. –
@MatsPetersson Chcę wyraźnie zmierzyć korzyść z rozwijania pętli. Napisany ręcznie napis faktycznie przyspiesza kod trzykrotnie, ale kompilator go nie wykrywa. – CygnusX1