Zen restons Zen

Bonsoir à toute la zone,

Voilà, je voudrais savoir si quelqu’un d’entre vous a déjà utilisé le timer Zen de Michael Abrash depuis un programme C.

Car il me semble qu’il est possible de faire une telle entourloupe avec le code assembleur du timer mais j’ai pas tout compris.

Comment ça ce passe ?
On met le listing assembleur dans un fichier que l’on include au fichier appelant les routines du timer comme si de rien n’étais ?

On fait de l’assembleur in line ?

Je vais continuer de tenter un tripatouillage de mon côté, et si quelqu’un a déjà expérimentée la chose alors je suis preneur.

Ce timer est-il vraiment plus précis qu’un “vulgiaire” timer faisant appel à la lib time.h ? J’entend par là est ce que les diverses interruptions du système en tentant le moins d’activité sur le PC pendant une mesure sont elles vraiment influentes sur la mesure ?

Par avance merci à vous.

Tu utilises un assembleur pour assembler le code et en générer un .o par exemple. Il doit y avoir moyen d’en faire une lib mais comme ça, je ne m’en souviens plus (et la flemme de chercher).

C’est quoi ta chaine de dev ? prends une fenêtre DOS (si tu es sous Windows) et tappe asm ou basm ou je-ne-sais-pas-quel-autre-assembleur et tu auras l’aide en ligne qui devrait être suffisante pour pouvoir te dépatouiller.

Tu veux faire quoi exactement ? tu entends quoi par timer ? (je ne connais pas la lib Zen). Tu veux quelle précision ?

Timer, ça peut vouloir dire que tu branches une routine sur une IT qui est levée toutes les 10 millisecondes, par exemple.

Je ne suis pas sûr de t’avoir aidé :stuck_out_tongue:

Je veux mesurer la durée d’éxécution d’un bout de code (un traitment d’image écrit avec brookGPU.
Ceci pour le mettre en face d’un même traitment sur le CPU.

Le timerZen à prériode courte permet de mesurer des temps d’éxécution d’un bout de code s’éxécutant en moins de 54ms avec une précision de 10µs sur les bécanes de l’époque (il parle d’un 8253 :P) dans ce bouquin

Ok ça date un peu et je sais pas si c’est toujours bien utilisable mais ça me parraissais pas mal.

Je recopie une partie du bouquin ici (oui je suis motivé :P)

[quote name=‹ Abrash ›]Utiliser le Timer Zen à partir de C

Le Timer Zen peut être utilisé pour mesurer les performances d’un code programmé en C, mais pas directement.
Comme nous l’avons vu précédemment, le timer est conçu pour être appelé depuis un langage Assembleur. Quelques modifications relativement mineures sont requises avant que les routines ZTimerOn (début de la mesure), ZTimerOff (fin de la mesure) et ZTimerReport (affichage des résultats) soient appelées depuis C. Il existe deux cas distincts pour le modèle small et le modèle large. Je vais commencer par le plus simple, le modèle mémoire small.

Modifier le Timer Zen pour lier un modèle mémoire small à un programme C nécessite de passer par les étapes suivantes : Changez ZTimerOn en _ZTimerOnZTimerOff en _ZTimerOff,changez ZTimerReport en _ZTimerReport, changez Code en _TEXT[…] Ces modifications convertissent le code pour utiliser des noms de label externe du style C et le segment de code du modèle mémoire small du C. En C++, utilisez « C » comme ceci :
extern « C » ZTimerOn(void);

En déclarant extern les routines du timer, aucun nom ne sera écorché et l’éditeur de liens pourra trouver les noms de routines C.

C’est tout. Une fois ces modifications faites, vous pourrez utiliser le TimerZen depuis C, par exemple avec :

ZTimerOn();
for(i=0;i<100;i++)
x+=i;

ZTimerOff();
ZTimerReport();

(Je parle ici de Timer de précision. Le Timer à période longue nécessite les mêmes modifications, mais à des lignes différentes)[/quote]

J’ai modifié les lignes du listing ASM (fichier asm) mais je comprend pas son histoire. Car on en fait quoi a la fin du listing ASM ? On le recompile à part ? On le link comme un bourrin à son code appelant comme si la partie de code appelée le sera comme si on faisait de l’asm en ligne ?
Je vois pas trop comment mettre en place ce bazard, je vais étudier tes dires Moktar.
et allez faire un dodo aussi :stuck_out_tongue: