Kompiluję moją aplikację w C ++ przy użyciu GCC 4.3. Zamiast ręcznie wybierać flagi optymalizacji -march=native
, których używam , które teoretycznie powinny dodać wszystkie flagi optymalizacji mające zastosowanie do sprzętu, na którym kompiluję. Ale jak mogę sprawdzić, których flag faktycznie używa?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
opcją, choć jako częśćcc1
wiersza poleceń ...-march=native
i będzie działać wszędzie tylko następujące:gcc -Q --help=target
.Aby zobaczyć flagi wiersza poleceń, użyj:
Jeśli chcesz zobaczyć definicje kompilatora / prekompilatora ustawione przez określone parametry, zrób to:
źródło
native
naprawdę oznacza.Powinien być (
-###
podobny do-v
):Aby pokazać "prawdziwe" flagi natywne dla gcc.
Możesz sprawić, by wyglądały bardziej „wyraźnie” za pomocą polecenia:
i możesz pozbyć się flag przez -mno- * za pomocą:
źródło
Jeśli chcesz dowiedzieć się, jak skonfigurować nienatywną kompilację krzyżową, uznałem to za przydatne:
Na maszynie docelowej
Następnie użyj tego na maszynie kompilacji:
źródło
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
ale rozmiary cache wydaje nieobecny.Zamierzam wrzucić moje dwa centy w to pytanie i zasugerować nieco bardziej rozwlekłe rozszerzenie odpowiedzi Eliasza. Począwszy od gcc 4.6, uruchamianie programu
gcc -march=native -v -E - < /dev/null
emituje coraz większą ilość spamu w postaci zbędnych-mno-*
flag. Następujące elementy usuwają te:Jednak zweryfikowałem poprawność tego tylko na dwóch różnych procesorach (Intel Core2 i AMD Phenom), więc sugeruję również uruchomienie następującego skryptu, aby upewnić się, że wszystkie te
-mno-*
flagi można bezpiecznie usunąć.Nie znalazłem różnicy między
gcc -march=native -v -E - < /dev/null
igcc -march=native -### -E - < /dev/null
innymi niż niektóre cytowane parametry - i parametry, które nie zawierają znaków specjalnych, więc nie jestem pewien, w jakich okolicznościach ma to jakiekolwiek znaczenie.Na koniec zwróć uwagę, że
--march=native
został wprowadzony w gcc 4.2, przed którym jest to tylko nierozpoznany argument.źródło