Article View: pl.comp.lang.asm
Article #258Re: optymalizacja
From: Bogdan (bogdro)
Date: Fri, 19 May 2006 11:20
Date: Fri, 19 May 2006 11:20
68 lines
3954 bytes
3954 bytes
tosamo napisał(a): >> mov eax,offset Intermediate_Hash >> mov DWORD PTR [eax+20],067452301h >> >> Zmienna zadeklarowana jest tak >> >> align 16 >> Intermediate_Hash DD 5 DUP(0) >> >> To fragment procedurki ktory powinein wystarczyc do przedstawienai >> problemu >> >> To sie wykonuje 40us (dla porownania caly hash z wyjatkiem tego kawalka >> liczy sie tylko 12us !!) >> >> Wiesz co z tym zrobic ? W zasadzie do pelni szczescia brakuje mi juz tylko >> tego fragmentu. > > No i sie troche wyjasnilo. Problemem jest to, ze laduje plik dll (mam 3 dll > z identycznymi > funkcjami hashujacymi w c, delphi i asm) i ten fragment napisany wyzej to > pierwsza > operacja na sekcji danych. Jesli zrobie inicjacje hashowania a potem wlacze > timer i powtorze > ta inicjacje to juz wykonuje sie okolo 1us zamiast 50us. > > Wersje c i delphi oczywiscie nie maja tego problemu bo przy ladowaniu dll > cos tam na pewno > mieszaja juz z danymi. > > Problem rozwiazalo zapisanie czegos w LibMain (DllMain) do pamieci. > > Wiesz moze czemu tak jest ? Musze w dokumentacji projektu opisac ten projekt > a nie za bardzo > wiem gdzie tego szukac. Prawdopodobnie (bo nie znam Win) jest dokładnie tak, jak mówi Lopez. Nie wszystkie części kodu/danych są od razu ładowane do pamięci przez system. Jak po raz pierwszy odwołujesz się do niezaładowanej sekcji, występuje wyjątek Page Fault, bo tej strony nie ma w pamięci. System obsługuje ten wyjątek i ładuje odpowiednie sekcje (strony pamięci) z dysku do RAM. Zarówno obsługa wyjątków, jak i operacje na dysku trwają długo. Rozwiązaniem tego problemu jest właśnie dowolny dostęp do niezaładowanej sekcji. Nawiasem mówiąc, proponuję kod: mov DWORD PTR [Intermediate_Hash+20],067452301h Długaśna z tego instrukcja wyjdzie, ale lepsza niż dwie. Wiesz, że ta instrukcja zapisuje dane poza tablicą Intermediate_Hash (która ma 20 bajtów)? Swoją drogą, można byłoby zrobić pożytek z pamięci podręcznej procesora: użycie instrukcji PREFETCH* mówi procesorowi, że "jakiś tam adres wkrótce będzie używany i dobrze byłoby go załadować do cache". To jest tylko wskazówka dla procesora, nie musi tego robić. Jeśli te instrukcje nie są dostępne (lub chcemy mieć pewność), to na początku programu jawnie załaduj gdziekolwiek zawartość kilku zmiennych (takich odległych o 16 czy 32 bajty od siebie). To załadowanie na początku chwilkę zaboli, ale potem dzięki temu wszystko powinno być w cache i operacje na danych powinny być wykonywane szybciej. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Technical Details
Message-ID:
<e4k9m6$ogh$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<e4f5nl$rj4$1@inews.gazeta.pl> <e4ffrk$he5$1@nemesis.news.tpi.pl> <e4fi7h$q1b$1@inews.gazeta.pl> <e4hbi4$fpm$1@atlantis.news.tpi.pl> <e4it6m$c00$1@inews.gazeta.pl> <e4j148$kn7$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@bogdan.pl> Newsgroups: pl.comp.lang.asm Subject: Re: optymalizacja Date: Fri, 19 May 2006 13:20:11 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 68 Message-ID: <e4k9m6$ogh$1@atlantis.news.tpi.pl> References: <e4f5nl$rj4$1@inews.gazeta.pl> <e4ffrk$he5$1@nemesis.news.tpi.pl> <e4fi7h$q1b$1@inews.gazeta.pl> <e4hbi4$fpm$1@atlantis.news.tpi.pl> <e4it6m$c00$1@inews.gazeta.pl> <e4j148$kn7$1@inews.gazeta.pl> NNTP-Posting-Host: actz222.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1148037638 25105 83.11.79.222 (19 May 2006 11:20:38 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Fri, 19 May 2006 11:20:38 +0000 (UTC) User-Agent: Thunderbird 1.5.0.2 (X11/20060420) In-Reply-To: <e4j148$kn7$1@inews.gazeta.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit