Article View: pl.comp.lang.c
Article #310042Re: Optymalizacja kodu
From: (fir)
Date: Sat, 28 Dec 2019 11:11
Date: Sat, 28 Dec 2019 11:11
110 lines
9616 bytes
9616 bytes
W dniu sobota, 28 grudnia 2019 11:58:53 UTC+1 użytkownik (fir) napisał:
> W dniu sobota, 28 grudnia 2019 11:52:58 UTC+1 użytkownik (fir) napisał:
> > W dniu sobota, 28 grudnia 2019 11:50:11 UTC+1 użytkownik M.M. napisał:
> > > On Saturday, December 28, 2019 at 10:26:57 AM UTC+1, (fir) wrote:
> > > > W dniu sobota, 28 grudnia 2019 10:11:26 UTC+1 użytkownik (fir) napisał:
> > > > > W dniu sobota, 28 grudnia 2019 03:44:41 UTC+1 użytkownik M.M. napisał:
> > > > > > On Friday, December 27, 2019 at 10:01:25 PM UTC+1, (fir) wrote:
> > > > > > > W dniu piątek, 27 grudnia 2019 21:54:14 UTC+1 użytkownik M.M. napisał:
> > > > > > > > On Friday, December 27, 2019 at 8:18:46 PM UTC+1, (fir) wrote:
> > > > > > > > > W dniu piątek, 27 grudnia 2019 20:12:09 UTC+1 użytkownik M.M. napisał:
> > > > > > > > > > On Friday, December 27, 2019 at 7:48:22 PM UTC+1, (fir) wrote:
> > > > > > > > > > > a co z dezasemblacja? to calkiem proste a wiele by wyjasnilo
> > > > > > > > > >
> > > > > > > > > > Jest kilka problemów z tym. Nie znam zasad łączenia instrukcji w pary/trójki
> > > > > > > > > > żeby procesor mógł je wykonać równocześnie, o czasach wykonania nie wspomnę.
> > > > > > > > > > No i bym musiał procedurę zostawić w asemblerze, dopracować ją (czytaj: napisać
> > > > > > > > > > lepiej niż kompilator) i utrzymywać w asemblerze. Wiec nawet jak znajdę
> > > > > > > > > > wyjaśnienie, to chyba nic mi z tego.
> > > > > > > > > >
> > > > > > > > > > Pozdrawiam
> > > > > > > > >
> > > > > > > > > chodzi o dezasemblacje i zobazenie co sie zmienilo miedzy ta wolniejsza a szybsza wersje a nie o pisanie asma (ktore nie jest zreszta wcale takie trudne mysle ze idzie sie nauczyc w dzien (choc sam nie pisalme jeszcze 64 bitowego asma)
> > > > > > > >
> > > > > > > > Zgodzę się, że dla kogoś kto biegle zna i używa asemblera na 386, byłby to
> > > > > > > > dobry przykład jak należy, a jak nie należy pisać wydajny kod w asemblerze.
> > > > > > > > Ja piszę w C++, dla mnie wstawka jednej instrukcji w asemblerze (np. to
> > > > > > > > popcount, xchange, rot) maksymalne użycie asemblera. Taki ktoś jak ja
> > > > > > > > chyba nie wyniesie z tego żadnej nauki?
> > > > > > > >
> > > > > > > jak to nie - zdezasembluj a dostaniesz odpowiedz na swoje pytaie czemu jest szybciej..jak nie umiesz czytac asma to zapostuj go na grupie tylko trzeba by zdizasemblowac odpowiednie kawalki
> > > > > >
> > > > > > Nie chciałem powiedzieć, że nie można się dowiedzieć z asemblera, tylko że jak
> > > > > > się dowiem, to nie spożytkuję tej wiedzy w innych programach. Ale nie ma
> > > > > > problemu, to tylko dodanie opcji -S do kompilatora:
> > > > > >
> > > > > > https://pastebin.com/xriqX0SS
> > > > > >
> > > > > > Które to kawałki - trudno powiedzieć. Może testy oddziela instrukcja:
> > > > > >
> > > > > > movabsq $6364136223846793005
> > > > > >
> > > > > > Pozdrawiam
> > > > > >
> > > > > > Pozdrawiam
> > > > >
> > > > > potrzebujesz napisac test w minimalnej wersji w c (tak zeby nie nylo niepotrzebnych wywolan) po czym zdizasemblowac wlasnie ten kawalek
> > > > > (najlepiej w tej normalnej skladni a nie w tej i z komentarzami)
> > > > >
> > > > > tutaj ja bym znalazl latwo te kawalki ale nie je pisalem bazowy kod i nie mam go w pamieci (zwlaszcza ze jest napisany w durnym dla mnie c++) po co tu sa wywolywane te wywolania do marsenne twister mialo chodzic o oryginalny kod z loopami, ciezko mi zmapowac to na kod w c ktorego nie znam, choc generalnie widac ze jest jak kawa na lawe - jako ze pokazuje nazwy funkcji ktore wola wywolaj sobie cos o uniklanej nazwie na poczatklu i koncu kawalka i znajdz przec control+f w teksiecie
> > > > >
> > > > > widac ze np jedna z oimawianych petli jest
> > > > >
> > > > > .L76:
> > > > > movl 28832(%rsp), %eax # rndBuf.select, D.82123
> > > > > leal 1(%rax), %edx #, tmp522
> > > > > testb $1, %al #, D.82123
> > > > > movl %edx, 28832(%rsp) # tmp522, rndBuf.select
> > > > > jne .L138 #,
> > > > > movq 28824(%rsp), %rbp # rndBuf.i2, D.82124
> > > > > cmpq %r14, %rbp # tmp566, D.82124
> > > > > je .L139 #,
> > > > > .L72:
> > > > > leaq 4(%rbp), %rax #, tmp555
> > > > > movq %rax, 28824(%rsp) # tmp555, rndBuf.i2
> > > > > movl 0(%rbp), %eax # *_756,
> > > > > addq %rax, %r13 # D.82120, sum
> > > > > subq $1, %r12 #, D.82120
> > > > > jne .L76 #,
> > > > > .L137:
> > > > >
> > > > >
> > > > > ale nei wiem dokladnie ktory to kawalek jak mowie trzeba to zdizasemblowac kawalkami i najlepiej napisac to w c wtedy widac co i jaki nie ma tez w tym nic trudnego tyle ze mi nieprzyjemnie jest debugowac czyjs kod na ktory nie moge patrzec bo jest w c++ i nie mam ogarniete jak on w calosci wyglaa
> > > >
> > > > testowanie i optymalizowanie wymaga duzo przepisywania tak ze mysle ze kolega powinien byc gotow na rozbicie tych 5-ciu czy tam ile testow na 5 minimalnych kilkolinijkowcow w c i zdezasemblowanie ich
> > >
> > > Nadal nie rozumiem jakie korzyści z analizy asemblera będę miał jako
> > > programista C++. Kiedyś byle jak napisana procedura w AMS działała 3
> > > razy szybciej niż porządnie napisana w C i z 5 razy szybciej niż w C++.
> > > Ale te czasy minęły, teraz trzeba bardzo dużo pracy włożyć aby czasami
> > > pokonać kompilator o parę procent. Ja raczej bym chciał lepiej wiedzieć
> > > jak pisać w C++ aby kompilator generował efektywny kod przy zachowaniu
> > > chociaż minimalnej przejrzystości kodu i podatności na rozbudowę.
> > >
> > jaki korzysci? poprostu odpowiedz na kolegi pytanie dlazego tu jest wolniej a dlaczego szybciej - akurat ta odpowiedz warto sobie sprawdzic a nie jest to wcale duzo roboty
> >
> > gdyby ja to pisal sprawdzilbym sobie to mysle w ciagu 20 minut i bym po prostu wiedzial
>
> co do tego przyspieszania o kilka procent to nie jestem taki pewien, mi samemu nie chce sie grzebac w asmie ale to zalezy od tego jaki wogole jest powod do optymalizacji (gdybym mial to bym zaczal pewnie na pisanie kodow przy pomocy skalarow lub intrinsicow ale ogladal tez kod w asmie)
>
> ogolnie to jak pisalem sam nie robie teraz optymalizacji czyli tutaj bym wzial zwykle rand()%modulo ew napisal sobie w minute druga wersje z cache w postaci tablicy statycznej n elementow gdyby mi naprawde bardziej zalezalo
>
> duzo wiekszym problemem w programowaniu jest dla mnie teraz kreatywnosc a nie optymalizacja - (ale nie neguuje ze warto sie jej nauczyc, warto jej tez uzywac tez nie neguje, tyle ze dla mnie osobiscie to nie jest ten moment)
ew niech kolega napisze ze dwa te testy
w czystym c w postaci jednego pliku c (moge byc bez funkcji miezenia czasu, sam rdzen sprawy
test1() {.. }
test2() {.. }
main()
{
test1();
test2();
}
to ew moge zdizasemblowac u siebie (co prawda to chyba bez sensu bo ja ciagle siedze na 32 bitowym xp (z wlasnego wyboru), a moj komp w win10 od lat w drugim pokoju porasta kurzem (i nie che mi sie na nim testowac bo musialbym przynosic odkurzac, przyzwyczajac sie do edytorow i okienek na zimniejszym w odczuciu systemie itd itd)
sama dizasemblacje z kolei lubie spozieranie w asma nie jest zle (dodam ze sam jestem tworca asemblera (org-asm, fajne bajery z tym asmem) sam sie zastanawiam czy nie warto by wrocic i w nim pogrzebac
Technical Details
Message-ID:
<8a471524-4bc0-41e8-8864-776facb1e28b@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!feeder5.feed.usenet.farm!feed.usenet.farm!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g89no3504499qtd.0!news-out.google.com!w29ni363qtc.0!nntp.google.com!g89no3504495qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<ed3041b7-c05f-43f3-887a-9a12a9633741@googlegroups.com> <2104ea83-5daa-4752-9a63-ed3346a14082@googlegroups.com> <82f8e967-0d0e-4bae-b005-aacb301b2349@googlegroups.com> <aa15d34a-292a-42ed-86cd-146377009a51@googlegroups.com> <00ddf4f0-f30c-413a-bda9-2ecd442ad84a@googlegroups.com> <003763c5-828f-4181-980c-f01f81e2a2c8@googlegroups.com> <d9d3d2f0-277e-4fa8-846d-d0784f45bc93@googlegroups.com> <efadabbf-295a-4f56-a5bf-d69d7eb7647d@googlegroups.com> <e46f3a29-ca94-427d-b0e0-fa791a51fadf@googlegroups.com> <31b3375d-ef24-40d7-a6db-a41e0fe5ac23@googlegroups.com> <4a7c96ab-288a-4e9a-a9a1-70c78fd578a1@googlegroups.com> <02fdc426-45d4-42e3-98a5-23316f63d901@googlegroups.com> <a7cd6b49-8d33-4ba8-a506-3679dc90aa42@googlegroups.com> <6824054f-4422-4145-a455-95a2c0c8c1d7@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:15ec:: with SMTP id p12mr47236089qkm.247.1577531475571; Sat, 28 Dec 2019 03:11:15 -0800 (PST) X-Received: by 2002:a81:a642:: with SMTP id d63mr42353659ywh.202.1577531475359; Sat, 28 Dec 2019 03:11:15 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!feeder5.feed.usenet.farm!feed.usenet.farm!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g89no3504499qtd.0!news-out.google.com!w29ni363qtc.0!nntp.google.com!g89no3504495qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Sat, 28 Dec 2019 03:11:14 -0800 (PST) In-Reply-To: <6824054f-4422-4145-a455-95a2c0c8c1d7@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=5.172.255.64; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN NNTP-Posting-Host: 5.172.255.64 References: <ed3041b7-c05f-43f3-887a-9a12a9633741@googlegroups.com> <2104ea83-5daa-4752-9a63-ed3346a14082@googlegroups.com> <82f8e967-0d0e-4bae-b005-aacb301b2349@googlegroups.com> <aa15d34a-292a-42ed-86cd-146377009a51@googlegroups.com> <00ddf4f0-f30c-413a-bda9-2ecd442ad84a@googlegroups.com> <003763c5-828f-4181-980c-f01f81e2a2c8@googlegroups.com> <d9d3d2f0-277e-4fa8-846d-d0784f45bc93@googlegroups.com> <efadabbf-295a-4f56-a5bf-d69d7eb7647d@googlegroups.com> <e46f3a29-ca94-427d-b0e0-fa791a51fadf@googlegroups.com> <31b3375d-ef24-40d7-a6db-a41e0fe5ac23@googlegroups.com> <4a7c96ab-288a-4e9a-a9a1-70c78fd578a1@googlegroups.com> <02fdc426-45d4-42e3-98a5-23316f63d901@googlegroups.com> <a7cd6b49-8d33-4ba8-a506-3679dc90aa42@googlegroups.com> <6824054f-4422-4145-a455-95a2c0c8c1d7@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <8a471524-4bc0-41e8-8864-776facb1e28b@googlegroups.com> Subject: Re: Optymalizacja kodu From: "(fir)" <profesor.fir@gmail.com> Injection-Date: Sat, 28 Dec 2019 11:11:15 +0000 Lines: 173 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit