Què passa quan el rellotge de la CPU fa pessigolles?
He pensat en un motor de programari
Menú principal
Navegació de l' article
Hi ha seccions de temps de temps d'un programa per a fer perfils d'actuació és una tasca sorprenentment pràctica d'error. Mentre que el temps del temporitzador existeix en totes les mares modernes del PC, està dissenyat per a temps llarg ús i només pot realitzar temps precís a l' interval de segons o més temps. La CPU moderna executa a les freqüències gigahertz i, per tant, necessiten capacitats de temps en el nanosegon per ser útils per al perfil de codi.
La solució òbvia és llegir el comptador intern del rellotge de la CPU, ja que aquest és el mecanisme real usat pel xip mateix. Afortunadament, Intel·ligència ha exposat aquesta paparra compte a través de la rdsc Les instruccions, que retornen el recompte de marques de CPU des que el xip era alimentat. És temptador imaginar que dividir aquest número per la freqüència del rellotge del processador Alexandros dóna un valor de temps nanosegon precís. Això era cert per generacions més antigues de CPU Intel·ligent que corren sistemes operatius de sol procés, però aquest ja no és el cas.
Primer, hi ha un conflicte d'interès entre l'ús de poder i l'actuació. Els xips consumeixen energia per a cada cicle rellotge completat, de manera que els creadors de xips han desenvolupat mètodes sofisticats d' ajustar la velocitat del rellotge actual depenent de la càrrega actual del sistema. Com a resultat, no és possible estar segur de la freqüència del rellotge en cap moment determinat, fins i tot si el model exacte de la CPU es coneix al programa.
En segon lloc, en sistemes operatius moderns, qualsevol secció de codi pot ser pausat en qualsevol moment pel sistema operatiu tal i com utilitza recursos de CPU a altres tasques. Això vol dir que no totes les marques de rellotge documentades necessàriament s'han usat pel codi que s'observa.
Aquestes limitacions s' han d'entendre i la solució des d' un punt de vista de perfil ve primer de l' observació que el valor real del temps real no és important per comparar el codi. El nombre de cicles del rellotge és, de manera que els canvis al codi que redueixen el nombre de cicles del rellotge necessaris per a realitzar una tasca sempre donaran una millora de rendiment, encara que no puguin ser puntuals. L'impacte del segon problema es pot reduir intentant quantificar el nivell d' incertesa en les observacions graves. Aquesta situació es pot expressar matemàticament en la següent equació:
ObservatTicks = RealTicks+Error
Els cicles del rellotge necessaris per una seqüència donada d' instruccions són invariants. Per tant, si s' han de fer múltiples observacions:
ObservedTicksmin = ActualTicks+Errormin
Això implica que l' error es pot minimular augmentant el nombre d' observacions fins que no hi hagi més reducció en el comptador mínim observat. En aquest punt, l' error és zero o alguna constant residual que pot ser modificat des del nostre codi de totes maneres. Això significa que mentre una sola mesura no es pot confiar en el perfil, un conjunt de observacions pot donar un valor de referència útil.
Per a poder perfilar el meu propi codi Free Pascal, he desenvolupat una petita unitat per fer ús de la rdsc Les instruccions. Conté 32 i 64 bit Intel muntardor d'Intel de manera que es pugui usar tant en les 32 com 64 versions del compilador sense dependències del sistema operatiu (no s' ha provat a Windows, Linux i Mac OS X). Es mostra un exemple del seu ús en el següent retall de codi:
El temporitzador es crea com un objecte global d' un solton, per tant no cal crear o alliberar. Hi ha tres mètodes ajudants que retornen la paparra com a text. Tenint en compte que aquests valors sovint poden ser números molt grans, dues d'aquestes rutines de sortida prenen divisions en el compte de 1000 i 1.000, 000 respectivament per a fer més manejables.
Artículos Relacionados:
- Quant de temps és una paparra de rellotge de la CPU?
- Què fa servir més la CPU?
- Una pissarra pot tenir més d'una CPU?
- Quin és un altre nom per a la CPU?
- Processador -