2012-05-18 13 views
5

Pracuję nad procesorem Nehalam/Westmere Intel Micro Architecture. Chcę zoptymalizować mój kod dla tej architektury. Czy istnieją jakieś specjalne flagi kompilacji lub funkcje C GCC, które pomogą mi poprawić wydajność pracy mojego kodu?Opcje GCC do optymalizacji dla danej architektury procesora

Już używam -o3.

Language of the Code - C 
Platform - Linux 
GCC Version - 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 

W moim kodzie mam porównanie zmiennoprzecinkowe i wykonano je ponad milion razy.

Załóżmy, że kod jest już najlepiej zoptymalizowany.

+5

Co w tym złego wyniki można uzyskać, patrząc na dokumentacji i Googling? – jthill

+0

http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html – Jay

+0

@jthill nie był w stanie uzyskać żadnej rzeczy dla tej architektury perticular .. więc zastanawiałem się, czy mamy coś konkretnego, jak kompilatory intel –

Odpowiedz

14

Możesz samodzielnie analizować wszystkie wyłączone i włączone optymalizacje. Uruchom na komputerze:

gcc -O3 -Q --help=optimizers | grep disabled 

A potem przeczytałem o flagi, które nadal są wyłączone i może według the gcc documentation wydajności wpływ.

16

Po pierwsze, jeśli naprawdę chcesz skorzystać z optymalizacji na nowszych procesorach, takich jak ten, powinieneś zainstalować najnowszą wersję kompilatora. 4.4 pojawił się kilka lat temu, a nawet jeśli nadal wydaje się być utrzymany, wątpię, aby nowszy kod optymalizacji został do tego przeniesiony. (Aktualna wersja to 4.7)

Gcc ma flagę optymalizacji catch-all, która zazwyczaj powinna generować kod zoptymalizowany pod kątem architektury kompilacji: -march=native. Razem z -O3 powinno to być wszystko, czego potrzebujesz.

(i dla przyszłych pytanie na tej stronie, należy użyć pełną angielską gramatykę i interpunkcję.)

+1

Jeśli nie budujesz swojego hosta, możesz użyć '-march = nehalem',' -march = sandybridge', '-march = haswell',' -march = bdver1 '(Bulldozer),' -march = bdver3' (Steamroller), '-march = silvermont', itp. Używaj' -mtune', aby dostroić się do określonego procesora bez używania rozszerzeń ustawianych przez instrukcje, które będą powodowały błędy w starszych procesorach. Na przykład '-march = nehalem -mtune = haswell' jest skrótem dla' -msse4.2 -mpopcnt -mtune = haswell' –

5

będziemy chcieli dodać opcję -march=.... Numer ... należy zastąpić czymkolwiek, co jest najbliższe architekturze procesora (występują niewielkie różnice) opisanej w artykule in the i386/x86_64 options for GCC here.

Chciałbym użyć core2 ponieważ corei7 (ten, który chcesz) jest dostępny tylko w GCC 4.6 i późniejszych. Zobacz arch list for GCC 4.6 here.

0

Jeśli naprawdę chcesz używać gcc tak stary, że nie obsługuje corei7, można użyć -mtune = Barceloną

Powiązane problemy