🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310045

Re: Optymalizacja kodu

#310045
From: (fir)
Date: Sun, 29 Dec 2019 04:50
124 lines
11410 bytes
W dniu niedziela, 29 grudnia 2019 05:38:56 UTC+1 użytkownik M.M. napisał:
> On Saturday, December 28, 2019 at 12:12:07 PM UTC+1, (fir) wrote:
> > W dniu sobota, 28 grudnia 2019 12:11:16 UTC+1 użytkownik (fir) napisał:
> > > 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
> > 
> > aha w sumie to mozna zdizasemblowac online, ale wolalbym by kolega napisal ten kod w wersji c i mozemy zobaczyc
> 
> Przepraszam, ale moim zdaniem zainwestowany czas w naukę asemblera nie
> zwróci się. Z 20 lat temu się uczyłem asemblera, w komercyjnym programie
> wykorzystałem z może jeden raz w życiu, a autor książki mnie zapewniał, że
> osoby które nauczyły się asemblera nie żałują teraz tego :)
> 
ja nie zaluje...a czas sie zwroci bo jest to dosyc maly czas bo asm jest dosyc prosty... mozna np wziac moj asembler i w nim sie latwo pisze, latwe wejscie do asma imo (choc nie wklepalem wszystkich kombinacji rejestrow i mnemonikow)

post o asmie wrzucilem chyba ba pl.comp.programming z malym przykladem jak prosto mozna mierzyc dokladnie co do cykla ile trwaja wybrana fragmenty kodu w asmie
Technical Details
Message-ID: <892b298e-2409-4440-8aa8-af76bb5fe2f4@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!g89no5511508qtd.0!news-out.google.com!w29ni456qtc.0!nntp.google.com!g89no5511498qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail
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> <8a471524-4bc0-41e8-8864-776facb1e28b@googlegroups.com> <bf2ff43d-f61d-4bad-b9e6-a054ec276e2c@googlegroups.com> <d1bdb0ee-df2f-40d0-8a26-67ebed5b9157@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:aed:2a87:: with SMTP id t7mr32079082qtd.384.1577595034571;        Sat, 28 Dec 2019 20:50:34 -0800 (PST)
X-Received: by 2002:a81:13cd:: with SMTP id 196mr44777099ywt.43.1577595034325; Sat, 28 Dec 2019 20:50:34 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!g89no5511508qtd.0!news-out.google.com!w29ni456qtc.0!nntp.google.com!g89no5511498qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Sat, 28 Dec 2019 20:50:33 -0800 (PST)
In-Reply-To: <d1bdb0ee-df2f-40d0-8a26-67ebed5b9157@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=5.172.255.187; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 5.172.255.187
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> <8a471524-4bc0-41e8-8864-776facb1e28b@googlegroups.com> <bf2ff43d-f61d-4bad-b9e6-a054ec276e2c@googlegroups.com> <d1bdb0ee-df2f-40d0-8a26-67ebed5b9157@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <892b298e-2409-4440-8aa8-af76bb5fe2f4@googlegroups.com>
Subject: Re: Optymalizacja kodu
From: "(fir)" <profesor.fir@gmail.com>
Injection-Date: Sun, 29 Dec 2019 04:50:34 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit