warum macht cpuid vor rdtsc das ergebnis genauer?
-
hallo ich wühle mich gerade bischen duch die gmp lib dazu hätt ich eine frage,
warum macht cpuid vor rdtsc das ergebnis genauer?C void speed_cyclecounter (unsigned p[2]); C C Get the pentium rdtsc cycle counter, storing the least significant word in C p[0] and the most significant in p[1]. C C cpuid is used to serialize execution. On big measurements this won't be C significant but it may help make small single measurements more accurate. .text ALIGN(8) defframe(PARAM_P,4) PROLOGUE(speed_cyclecounter) deflit(`FRAME',0) pushl %ebx FRAME_pushl() xorl %eax, %eax cpuid rdtsc movl PARAM_P, %ebx movl %eax, (%ebx) movl %edx, 4(%ebx) popl %ebx ret EPILOGUE()
-
Es steht doch bereits ziemlich genau im Kommentar, was sich die Macher dabei gedacht haben: Die Ausfuehrung(sreihenfolge) soll "serialisiert" werden, um "vielleicht" genauere Werte bei der Messung zu bekommen.
Dh. praktisch soll wohl durch einen komplexen Befehl die Ausfuehrungspipeline geleert werden, damit der Instruction counter auch wirklich alle bisher gelaufenen Befehle zaehlt.
Wie viel Sinn das wirklich macht, ist von CPU zu CPU wahrscheinlich fraglich, aber schaden wird es auch nicht.
-
"serialize execution" hatte ich iwie nicht verstanden daher hab ich gefragt
-
soweit ich weiss ist bei jeder x86 cpu der cpuid befehl ein spezialbefehl, weil er selten aufgerufen wird und wenn, dann absolut nicht an zeitkritischen stellen.
deswegen sollte man auch aufpassen, genau so wie der befehl dafuer sorgt dass messungen genauer werden, verschlechtert er das resultat.