🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #1498

Pomiar cykli procesora

#1498
From: Ryouk
Date: Sun, 23 Sep 2007 10:13
39 lines
1877 bytes
Cześć, mam pytanie, które wynikło z programu w C++, ale dotyczy raczej
assemblera. Napisałem sobie taką wstawkę do liczenia taktów procesora od
ostatniego resetu.

#v+
inline uint64_t rdtsc() {
   uint32_t lo, hi;

   __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
   
   return (static_cast<uint64_t>(hi) << 32 | lo);
}
#v-

Dla niezorientowanych - przy użyciu RDTSC pobiera 64 bitową liczbę
określającą ilość cykli procesora od ostatniego resetu. A że rejestry są
32 bitowe, to muszę to odpowiednio przesunąć i zamienić w 64 bity. 

Dalej dwa razy pod rząd wywołuję tę funkcję, a wyniki odejmuję.
G++ generuje taką wstawkę:

#v+
#APP
        rdtsc
#NO_APP
        movl    %edx, -24(%ebp)
        movl    %eax, -20(%ebp)
#APP
        rdtsc
#NO_APP
#v-

Wg manuala i opinii jednego asemblerowca te movy to jakieś 2 cykle, a mój
program daje wynik około 44 cykli. Na komputerze znajomego wynik to 35.

Rozumiem, że w systemie siedzi sobie planista i rozdziela czas procesora, 
ale wydaje mi się, że daje tego czasu więcej niż 2 cykle :)

No więc z czego to wynika?
Technical Details
Message-ID: <fd5e92$cbh$1@nemesis.news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: Ryouk <Ryouk@e.tam>
Newsgroups: pl.comp.lang.asm
Subject: Pomiar cykli procesora
Date: Sun, 23 Sep 2007 10:13:54 +0000 (UTC)
Organization: none
Lines: 39
Message-ID: <fd5e92$cbh$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: ego209.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1190542434 12657 83.21.78.209 (23 Sep 2007 10:13:54 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Sun, 23 Sep 2007 10:13:54 +0000 (UTC)
User-Agent: slrn/0.9.8.1 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit