Migration de Delphi vers Kylix : CpuSpeed
Date de publication : 25/07/2001
Par
Eric SIBERT (Chez Eric Sibert)
Bon, je n'ai pas commencé trop fort. J'ai pris une application console élémentaire sous Delphi 5. Cette application appelle l'instruction RDTSC du microprocesseur qui indique le nombre de cycles d'horloge depuis le démarrage de l'ordinateur. On attend ensuite une seconde puis on redemande le nombre de cycles. En faisant la différence, on a la fréquence CPU.
Voici le code source :
program Project1;
{$APPTYPE CONSOLE}
uses
{$IFDEF WIN32}
windows;
{$ENDIF}
{$IFDEF LINUX}
libc;
{$ENDIF}
function RDTSC: int64;
register;
asm
db $0f, $31
end;
const
Delta = 1000;
var t, t1 : int64;
begin
t := rdtsc;
{$IFDEF WIN32}
sleep(Delta);
{$ENDIF}
{$IFDEF LINUX}
usleep(Delta*1000);
{$ENDIF}
t1:=rdtsc-t;
writeln('This PC is running at about ',t1 div Delta,'kHz');
readln;
end. |
Les "problèmes" rencontrés :
- dans les uses, exit Windows (il n'y a pas de librairie de remplacement, on le supprime simplement)
- je n'ai pas retrouvé sleep (on m'a pourtant dit qu'il était dans SysUtils mais je ne l'ai pas vu). J'ai mis à la place usleep qui provient de libc d'où l'ajout de libc dans la clause uses.
- un petit F9 et là rien ! En mode débug, on voit bien que le code s'exécute mais ne s'arrête sur le readln final. En fait, il faut indiquer d'utiliser une application externe pour lancer notre application :
En l'occurence xterm, la version X-Windows d'une console Unix.
Et ça marche.
Les "problèmes" que je N'ai PAS rencontrés :
- le code en assembleur passe tout seul :)))
Et voilà le résultat :
| Delphi 5 (Windows) |
Kylix (Linux) |
 |
 |
 
|