🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72562

Re: gcc i icc

#72562
From: Krzysztof Halasa
Date: Sat, 29 Sep 2012 19:30
74 lines
3248 bytes
Adam Majewski <adammaj1@o2.pl> writes:

> W książce :Programowanie w Linuksie. Ćwiczenia
> Autorzy: Katarzyna Kuźniar, Kazimierz Lal, Tomasz Rak
> Data wydania: 2012/07
> http://helion.pl/ksiazki/programowanie-w-linuksie-cwiczenia-katarzyna-kuzniar-kazimierz-lal-tomasz-rak,cwplin.htm
>
> jest porównanie czsu wykonania programu mnożącego macierze dwuwymiarowe.
> Można pobrać przykładowy rozdział w pdf i tam jest ten przykład.
> Dla gcc czas = 1345 ms
> dla icc czas =  109 ms
>
> Czyli program skompilowany przez icc wykonywany jest 12 razy szybciej.
>
> Co o tym sądzicie ?

Łatwo sprawdzić. Nie mam niestety maszynki z Phenomem II N620 + 4 GB
RAM, najbardziej zbliżona ma nieco wolniejszy zegar i 2 GB RAM:

model name      : AMD Athlon(tm) II X2 245 Processor
cpu MHz         : 2200.000
cache size      : 1024 KB
cpu cores       : 2

Tamten ich Phenom jest podobny:
model name	: AMD Phenom(tm) II N620 Dual-Core Processor
cpu MHz		: 2800.000
cache size	: 1024 KB
cpu cores	: 2


$ gcc -W -Wall test.c -o test
test.c: In function ‘main’:
test.c:57:2: warning: implicit declaration of function ‘gettimeofday’ [-Wimplicit-function-declaration]

$ ./test 500 500 500
arg[0] = 500
arg[1] = 500
arg[2] = 500
Start
Czas: 1375 milisekund

No rzeczywiście... tyle że tak jest bez optymalizacji.

W normalnych warunkach:
$ gcc -O2 -W -Wall test.c -o test
$ ./test 500 500 500
Czas: 251 milisekund
...
Czas: 340 milisekund

Swoją drogą, spore różnice - maszynka jest w tej chwili nieco obciążona,
pewnie dlatego. Trzeba będzie się temu przyjrzeć w wolnej chwili.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
28071 named     20   0  249m  39m 2948 S 160.7  2.3   5612:36 named


Gcc 4.7.2, 64 bity. Kod 32-bitowy:
Czas: 519 milisekund
Czas: 566 milisekund
Czas: 513 milisekund

Owszem, widać wyraźnie różnicę między tymi wynikami (w najlepszym
przypadku czas gcc to 251 ms / 2800 * 2200 (różnice w zegarach CPU) =
ok. 197 ms), ale bez przesady. Nie miałem okazji przetestować z ICC,
przypuszczalnie mają tam lepszy optymalizator potrafiący przerobić
takie coś na SSE.

Złośliwie zauważę, że oni chyba pomylili program pokazujący różnice
między kompilatorami z przykładem "jak nie powinien wyglądać program
w C", zarówno jeśli chodzi o treść jak i o algorytm :-)
-- 
Krzysztof Halasa
Technical Details
Message-ID: <m3txugk4om.fsf@intrepid.localdomain>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!news.nask.pl!news.nask.org.pl!not-for-mail
References: <k46i43$pte$1@news.dialog.net.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!news.nask.pl!news.nask.org.pl!not-for-mail
From: Krzysztof Halasa <khc@pm.waw.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: gcc i icc
Date: Sat, 29 Sep 2012 21:30:17 +0200
Organization: NASK - www.nask.pl
Lines: 74
Message-ID: <m3txugk4om.fsf@intrepid.localdomain>
References: <k46i43$pte$1@news.dialog.net.pl>
NNTP-Posting-Host: nat.piap.pl
Mime-Version: 1.0
X-Trace: pippin.nask.net.pl 1348947021 15267 195.187.100.13 (29 Sep 2012 19:30:21 GMT)
X-Complaints-To: abuse ATSIGN nask.pl
NNTP-Posting-Date: Sat, 29 Sep 2012 19:30:21 +0000 (UTC)
Cancel-Lock: sha1:JCuQia8Qyjqfrf79/kvEgm6zBXQ=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit