Article View: pl.comp.os.linux.programowanie
Article #72566Re: gcc i icc
From: Baranosiu
Date: Mon, 08 Oct 2012 17:37
Date: Mon, 08 Oct 2012 17:37
31 lines
2795 bytes
2795 bytes
Dnia 08.10.2012 orcus@pwr.wroc.pl <orcus@pwr.wroc.pl> napisał/a: > On 2012-10-08, Baranosiu <rad_n@wp.pl> wrote: >> Żaden kompilator nie zastąpi myślenia :D > > Przy sporze o to który samochód może pojechać szybciej > z 4 osobami i bagażami w środku też można powiedzieć, że > mój - przecież bez tych 4 osób jest najszybszy... Samochód może i jest nieco szybszy, ale to w jakim czasie pokonasz trasę od punktu A do pnktu B zależy też od kierowcy :D Co do mojego posta: od kilku lat nie używam icc i nie wiem jak on się ma teraz do gcc, ale nigdy różnica nie była aż 12-krotna :D Autorzy chyba "na szybko" pisali ten kod w książce (swoją drogą ja bym się nawet wstydził opublikowac kod z takim formatowaniem :D) i trafił się przypadek, w którym wyjątkowo icc sobie poradził kilkunastokrotnie lepiej, więc odpisałem autorowi pytania, że "diabeł" tkwi w samym indeksowaniu. Gdyby to były tablice zadeklarowane jako c[500][500] i b[500][500] to szło by jak burza bo wyliczenie adresu elementu jest proste, a skoro tablice są zadeklarowane jako **b i **c i potem "ręcznie" są alokowane miejsca dla każdego wiersza z osobna, to te wiersze nie muszą leżeć w pamięci "jeden za drugim", więc wyliczenie adresu elementu przestaje być prostym mnożeniem i dodawaniem, tylko trzeba "pobiegać" po pamięci. GCC akurat jest tak napisany, że optymalizator lepiej sobie radzi, jeśli wewnątrz pętli zmienia się ostatni indeks, bo wtedy nie trzeba za każdym razem wyliczać początku wiersza (choć mógłby też zauważyć, że wyrażenie c[i][j] wewnątrz najbardziej zagnieżdżonej pętli wskazuje zawsze na ten sam element i nie trzeba go za każdym razem wyliczać, ale jak się okazuje, przy niewielkim nakładzie pracy można "nieznacznie" pomóc kompilatorowi i przyspieszyć kod nawet kilkunastokrotnie :D).
Technical Details
Message-ID:
<k4v300$hb3$1@news.task.gda.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.task.gda.pl!not-for-mailReferences:
<k46i43$pte$1@news.dialog.net.pl> <k4ul0s$glj$1@news.task.gda.pl> <slrnk761gg.tbc.orcus@orcus.wcss.wroc.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.task.gda.pl!not-for-mail From: Baranosiu <rad_n@wp.pl> Newsgroups: pl.comp.os.linux.programowanie Subject: Re: gcc i icc Date: Mon, 8 Oct 2012 17:37:06 +0000 (UTC) Organization: CI TASK http://www.task.gda.pl/ Lines: 31 Message-ID: <k4v300$hb3$1@news.task.gda.pl> References: <k46i43$pte$1@news.dialog.net.pl> <k4ul0s$glj$1@news.task.gda.pl> <slrnk761gg.tbc.orcus@orcus.wcss.wroc.pl> Reply-To: Baranosiu <rad_n@wp.pl> NNTP-Posting-Host: user-164-126-63-157.play-internet.pl Mime-Version: 1.0 X-Trace: news.task.gda.pl 1349717826 17763 164.126.63.157 (8 Oct 2012 17:37:06 GMT) X-Complaints-To: abuse@news.task.gda.pl NNTP-Posting-Date: Mon, 8 Oct 2012 17:37:06 +0000 (UTC) User-Agent: slrn/pre1.0.0-18 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit