Article View: pl.comp.lang.asm
Article #1498Pomiar cykli procesora
From: Ryouk
Date: Sun, 23 Sep 2007 10:13
Date: Sun, 23 Sep 2007 10:13
39 lines
1877 bytes
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-mailShow 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