Article View: pl.comp.lang.asm
Article #252Re: optymalizacja
From: tosamo
Date: Wed, 17 May 2006 16:15
Date: Wed, 17 May 2006 16:15
105 lines
4194 bytes
4194 bytes
Użytkownik "Bogdan (bogdro)" <bogdan@bogdan.pl> napisał w wiadomości
news:e4ffrk$he5$1@nemesis.news.tpi.pl...
> tosamo napisał(a):
>> Witam
>>
>> Pisze sobie porgramik w masm32 (wersja 6.11 chyba). Do tej pory pisalem
>> glownie w c i pascalu wiec na poczatku
>> program w asm wygladal jak dokladna kalka z jezykow wyzszego rzedu i
>> dzialal
>> jakies 3 razy wolniej niz
>> pascal i delphi. Potem zaczalem optymalizowac i wyszlo na to, ze kazda
>> optymalizacja zwalnia dzialanie programu
>> o kilka(dziesiat) %.
>
> Optymalizacja numer 3: jeśli obie powyższe dają niewystarczające
> wyniki, sięgaj po assemblera.
To ma byc na zaliczenie z jezykow asemblerowych wiec musi byc w asm.
Ciekawe co powie wykladowca jak zobaczy ze w asm wyszlo 5 razy wolniej niz w
c
i 4 razy wolniej niz w delphi.
>> Na przyklad:
>>
>> {..}
>> ;
>> mov ebx,eax
>> mov DWORD PTR [Buffers],eax ; A = temp
>
> Też możliwe, że przez movsd. Ror na pamięci też nie wymiata, ale
> przynajmniej jest Direct Path.
> Tą drugą wersję można jeszcze przyspieszyć moim zdaniem, używając
> różnych rejestrów.
Moze i mozna. I tak postanowilem pojsc inna droga i zupelnie wywalilem
te kopiowanie.
>> Albo na przyklad mam cos takiego :
>>
>> mov al,byte ptr [esi+ecx]
>> mov byte ptr [edi+ebx],al
>> inc ecx
>> inc ebx
>> inc [Message_Block_Index] << TO JEST WAZNE
>> ;
>> add [Length_Low],8
>> jnz sha1_input8 ;
>> inc [Length_High] ;
>> jnz sha1_input8
>> mov [Corrupted],1
>>
>> Zmienna Message_Block_Index to zwykla zmienna DD w sekcji .data. Nie jest
>> do
>> niczego juz potrzebna bo zamiast niej
>> zapisuje dane w rejestrach. Usuwam ta linie i program zwalnia o 5% !
>> Oczywiscie dziala bez zmiena tylko wolniej.
>
> Wstaw ze 5-10 NOPów, może pomoże. Chodzi o to, że poprzednie
> instrukcje się muszą wykonać, nowe - zostać zdekodowane. Tak *mi* się
> wydaje. Poza tym, należy unikać używania rejestrów cząstkowych o ile
> się da.
Ten fragment to akurat dokladna kopia z c. Postaram sie to jeszcze
zoptymalizowac.
Zrobie kopiowanie calych blokow po 4 bajty i znowu bede mial o 50% wolniej.
> Należy rozdzielać instrukcje zależne.
Ale o co chodzi ?
>> {..}
>> lodsd
>
> Instrukcje łańcuchowe są powolne.
A ja caly czas zylem w przeswiadczeniu, ze to najszybszy sposob na
kopiowanie
pamieci. W takim razie co bedzie szybsze ?
Takie cos ?
mov eax,dword ptr [esi]
inc esi
>> Czy ktos mi to wyjasni albo chociaz powie gdzie mozna jakies konkrety na
>> ten
>> temat przeczytac ?
>
> Ja swoje informacje biorę z podręczników optymalizacyjnych AMD:
> http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_739_7044,00.html
Zobacze.
> Niedawno jeden kolega na alt.pl.asm próbował łamać MD5. Może
> połączycie siły? To, że w SHA1 i MD5 odkryto jakieś dziurki nie
> oznacza od razu, że w jakimś rozsądnym czasie znajdziecie kolizje.
Ja nie probuje lamac sha. Musze tylko zrobic zeby bylo chociaz o kilka %
szybsze niz
przyklad w c i bedzie ok. Juz mi wyszlo, ze dla duzych blokow danych jest
szybszy tylko
z malymi sobie nie radzi.
Dzieki za odpowiedz.
Technical Details
Message-ID:
<e4fi7h$q1b$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<e4f5nl$rj4$1@inews.gazeta.pl> <e4ffrk$he5$1@nemesis.news.tpi.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "tosamo" <tosamo@o2.pl> Newsgroups: pl.comp.lang.asm Subject: Re: optymalizacja Date: Wed, 17 May 2006 18:15:41 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 107 Message-ID: <e4fi7h$q1b$1@inews.gazeta.pl> References: <e4f5nl$rj4$1@inews.gazeta.pl> <e4ffrk$he5$1@nemesis.news.tpi.pl> NNTP-Posting-Host: aalp237.neoplus.adsl.tpnet.pl X-Trace: inews.gazeta.pl 1147882545 26667 83.5.45.237 (17 May 2006 16:15:45 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Wed, 17 May 2006 16:15:45 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830 X-Priority: 3 X-RFC2646: Format=Flowed; Original X-Newsreader: Microsoft Outlook Express 6.00.3790.1830 X-User: etet100 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit