begin process at 2012 05 24 04:21:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Api Windows

 > VITESSE CPU EN MGHZ (WIN32)

VITESSE CPU EN MGHZ (WIN32)


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Api Windows Niveau :Débutant Date de création :18/06/2004 Date de mise à jour :03/06/2006 19:12:56 Vu / téléchargé :7 916 / 510

Auteur : BruNews

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note


 Description

Calcul precis en 125 milliemes de seconde.

Source

  • bnGetCpuSpeed PROC
  • sub esp, 28
  • lea eax, dword ptr[esp+8]
  • push eax
  • call QueryPerformanceFrequency
  • mov [esp+24], esi
  • test eax, eax
  • je short cpuExit
  • mov esi, QueryPerformanceCounter
  • push esp
  • call esi
  • mov edx, dword ptr[esp+8]
  • mov eax, dword ptr[esp+12]
  • shrd edx, eax, 3
  • shr eax, 3
  • add dword ptr[esp], edx
  • adc dword ptr[esp+4], eax
  • rdtsc
  • mov dword ptr[esp+16], eax
  • mov dword ptr[esp+20], edx
  • milli125:
  • lea ecx, dword ptr[esp+8]
  • push ecx
  • call esi
  • mov edx, dword ptr[esp+12]
  • mov eax, dword ptr[esp+8]
  • cmp edx, dword ptr[esp+4]
  • jb short milli125
  • ja short outMilli
  • cmp eax, dword ptr[esp]
  • jb short milli125
  • outMilli:
  • rdtsc
  • mov ecx, 2251799814 ; DIVISION 125000
  • sub eax, dword ptr[esp+16]
  • mul ecx
  • mov eax, edx
  • mov esi, [esp+24]
  • shr eax, 16
  • cpuExit:
  • add esp, 28
  • ret 0
  • bnGetCpuSpeed ENDP
bnGetCpuSpeed PROC
   sub     esp, 28
   lea     eax, dword ptr[esp+8]
   push    eax
   call    QueryPerformanceFrequency
   mov     [esp+24], esi
   test    eax, eax
   je      short cpuExit
   mov     esi, QueryPerformanceCounter
   push    esp
   call    esi
   mov     edx, dword ptr[esp+8]
   mov     eax, dword ptr[esp+12]
   shrd    edx, eax, 3
   shr     eax, 3
   add     dword ptr[esp], edx
   adc     dword ptr[esp+4], eax
   rdtsc
   mov     dword ptr[esp+16], eax
   mov     dword ptr[esp+20], edx
milli125:
   lea     ecx, dword ptr[esp+8]
   push    ecx
   call    esi
   mov     edx, dword ptr[esp+12]
   mov     eax, dword ptr[esp+8]
   cmp     edx, dword ptr[esp+4]
   jb      short milli125
   ja      short outMilli
   cmp     eax, dword ptr[esp]
   jb      short milli125
outMilli:
   rdtsc
   mov     ecx, 2251799814 ; DIVISION 125000
   sub     eax, dword ptr[esp+16]
   mul     ecx
   mov     eax, edx
   mov     esi, [esp+24]
   shr     eax, 16
cpuExit:
   add     esp, 28
   ret     0
bnGetCpuSpeed ENDP


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 octobre 2005 17:52:54 :
site
03 juin 2006 19:12:56 :
site

 Sources du même auteur

Source avec Zip ECRIRE DANS BDR, DEMO MINIMALE (WIN32)
Source avec Zip TABULATIONS EN ESPACES (MASM32)
Source avec Zip DATE CONVERSION EN INT32 (MASM32 WIN32)
Source avec Zip FICHIER UNIX VERS WINDOWS (MASM32 WIN32)
Source avec Zip FAIRE FICHIER ISO (MASM32)

 Sources de la même categorie

Source avec Zip Source avec une capture BODY_ROTATION BASÉ SUR LE TRAVAIL DE TOM par jose2pepe
Source avec Zip Source avec une capture FROM TOM'S CUBE_ROTATION AND CUBE_5 CUBE COLOR RENDERIZED par jose2pepe
Source avec Zip REUTILISER N'IMPORTE QUEL PROGRAMME EX:WORDPAD par ToutEnMasm
Source avec Zip CRÉER DES TABLEAUX DE DONNÉES DE MANIÈRE DYNAMIQUE par ToutEnMasm
Source avec Zip AFFICHAGE DATE ET HEURE AVEC DES BITMAPS par jejamar

Commentaires et avis

Commentaire de BruNews le 18/06/2004 15:25:23 administrateur CS

Prog de test dans le zip.

Commentaire de Bombela le 21/06/2004 22:01:22

Zut !

Pour un 2000Mhz, ocille entre 2017 et 2200 !!

Y a un blême...

@+

Commentaire de Bombela le 21/06/2004 22:18:48

J'ai pas le temps d'analyser ton code, tu pourrais me l'expliquer ?

(Je parle de la procédure pour analyser la vitesse de CPU)

Juste que tu mettes quelques commentaire, notament pour l'instruction spéciale que tu utilise. (Elle choppe le nombre d'instruction executée par le CPU ?)

Merci man !

Commentaire de BruNews le 21/06/2004 23:26:35 administrateur CS

Dixit Intel manuel 2:
RDTSC-Read Time-Stamp Counter
This instruction loads the current value of the processor's time-stamp counter into the EDX:EAX registers. The time-stamp counter is contained in a 64-bit MSR. The high-order 32 bits of the MSR are loaded into the EDX register, and the low-order 32 bits are loaded into the EAX register. The processor increments the time-stamp counter MSR every clock cycle and resets it to 0 whenever the processor is reset.

Bombela > c'est quoi comme type de processeur, tu as peut-etre une gestin d'energie dessus qui lui abaisse la frequence si peu employe ?

Commentaire de Bombela le 22/06/2004 11:11:23

C'est un P4 2000mh detecté partout comme un 2017mhz.
C'est ça fréquence d'origine. (PEut pas le monter ! Le FSB arrache tout sinon ;0)

J'ai fais des testes, et j'ai pas eu autre chose quze 2017 !
C'est peut être que le CPU était occuper sur une tâche prioritaire qui à laisser le temp à tes valeur de boucler ?

Mais j'oubliais de te dire bravo ! Pour cette source ;)

Au fait, t'attend conbien de temp entre chaque réception du RDTSC ?
10 Millisecondes ? PLus ? Moins ?

@+

Commentaire de BruNews le 22/06/2004 11:24:09 administrateur CS

Le bouclage est sur QueryPerformanceCounter en CONTINU jusque atteigne 125 milli secondes. RDTSC est 1 fois au debut avant boucle et 1 fois en sortie.

Commentaire de Bombela le 22/06/2004 13:30:50

Ok. Merci.

Mais de toute magnière, on peut attendre une seconde, c'est pareil nan ?

Vu que c'est tout les cycles que le compteur avance...

@+

Commentaire de BruNews le 22/06/2004 13:43:00 administrateur CS

Attendre... je veux bien mais me semble que le but d'un prog est le resultat juste en un minimum de temps, non ?

Commentaire de Bombela le 22/06/2004 14:05:40

Oui ! Lol

T'as raison, mais je veut dire qu'indifférament du temps, on peut shopper la vitesse du CPU. C'est bien pratique !

Mais une question ? Comment fonctionne les timers précis de Windows ? Parce qu'en programmation système, j'ai pas (encore ;) trouvé le moyen de faire ça !

Je connais bien sur l'interruption timer, mais elle est limitée à 55 millisecondes...

Et c'est pas rond pour 125 milisecondes !

M'enfin je me goure de calcul peut-être...

@+

Commentaire de Bombela le 22/06/2004 14:16:12

Autre chose encore, elle est viollante ta procedure ultoa !!!

Tu pourrais faire plus cours quand même !
En passant par la pile ;) Y moins de condition ! (PLus qu'une)

Un truc du genre:

EAX = LONG
EDI = *Str

ultoa:
  pushad
  pushf

  cld

  xor cx, cx
  mov ebx, 10

  .boucle
    xor edx, edx
    div ebx ; EDX:EAX div EBX > EAX = Qotient et EDX = Reste.

    add dl, 48 ; Convertion en Ascii.
    push dx

    inc cx

    test eax, eax
  jnz .boucle

  .boucle2
    pop ax
    stsb ; Met dans la chaîne al <=> chiffre ascii.
  loop .boucle2

  popf
  popad
ret

Voilà ! C'est ce que j'utilise...
M'enfin ta peut-être tes raisons...

@+

Commentaire de Bombela le 22/06/2004 14:21:34

Ah, excuse, j'ai oublier arprès la boucle 2 de mettre:

xor al, al
stsb

Là ! C'est mieux ;0)

@+

Commentaire de BruNews le 22/06/2004 14:28:16 administrateur CS

'div' est une cata en terme de perf et surtout dans une boucle.
Ma ultoa retourne pointeur sur fin d'ecriture, tres pratique pour les chainages par exemple dans du reporting, on gagne pas mal de temps. Bien entendu ici c'etait inutile, on peut donc retirer 2 instructions mais vraiment pas grave.
125 milli secondes est le temps qu'on reste dans la boucle a agiter le processeur, faudrait ajouter les quelques calculs de debut et de fin mais doit etre infime avec les processeurs actuels.

Commentaire de Bombela le 22/06/2004 15:07:34

Heu... Mais je crois pas que ton code soit plus rapide que le miens...

Le nombre d'instruction que tu met dépasse une boucle avec div !

Bon la mienne ne mes pas à jours EDI ? Bah ! Suffit de modifer la valeur pushé par le pushad dans la pile ! C'est tout !

Tu sais quoi ? Et bien dès que j'ai du temps, je vais tester la vitesse de nos deux fonctions avec 1000 ou 10000 execution à la suite.

Je te tiendrais au courant.

@+

Commentaire de mirlaine le 26/06/2004 14:45:46

salut
je me demandai si yavai dotre moyen pour trouver la vitess du cpu...

je sai pas si ton code tien compt des system à plusieur processeur
et je me demandai si c'etait possible san api enfin c'est pluto commen
c'est possible car ca deja ete fait je pense

sinon chez moi ca march tres bien a+

Commentaire de BruNews le 26/06/2004 15:17:44 administrateur CS

mirlaine > teste sur bixeon Server 2003, va impec.

Commentaire de FearBlue le 08/07/2004 17:09:33

Marche nikel chez moi

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales