Aller au contenu

PCI Mark


sky99

Messages recommandés

ouais ca veut dire que le cpu est optimisé pour calculer des cos

pour ce qui est de l'asm en lui-même je pense que c'est indispensable a ce type de projet pour qu'il soit fiable... en effet, je suis loin d'être cultivé sur les compilos mais je pense que si on fait pas gaffe y'a facilement moyen que des accès mémoire se glissent au milieu du processus (et il faut pas - la mémoire [non-cache j'entends] c trop trop lent par rapport au proc), ou d'autres trucs qui font que ça n'utilise pas QUE le proc

cela dit pour revenir au truc des DSE, je pense que des fonctions du type (E(x)-x)^2 doivent pas être DSE autour de certains points (entiers par exemple ? ou entiers + 0.5...) (E(x) étant la partie entière de x - qui se calcule 'facilement' à partir d'un float avec un décalage de bits vers la gauche et un masque)

math spé powaaaa! :keskidit:

......cherchez pas, je suis loin.......

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 137
  • Créé
  • Dernière réponse
  • 4 semaines après...

Je vous propose le bench que j'ai écrit ( assez simple, je débute en C )

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

int main(int argc, char* argv[])
{  
LARGE_INTEGER frequency;
LARGE_INTEGER startCount;
LARGE_INTEGER endCount;
LONGLONG count;
double nombre_float;
long n;
int score_float;
int score_int;
int nombre_int;
FILE *output;

output = fopen("result.txt", "w");
if (output == NULL) {
 printf("Unable to create result file\n");
 return 1;
}
QueryPerformanceFrequency(&frequency);
nombre_float = 0;
nombre_int = 0;
printf("Benchmarking FPU unit...\n");
//	__asm{int 3};
QueryPerformanceCounter(&startCount);
for (n = 0; n < 2000000000; n++) {
 nombre_float = nombre_float + 1.0000000001;
 nombre_float = nombre_float * 1.0000000001;
}
QueryPerformanceCounter(&endCount);
count = endCount.QuadPart - startCount.QuadPart;
score_float = (long)(frequency.QuadPart * (LONGLONG)1000 / count);
printf("Float Count = %i\nFloat Score = %i\n",
    (long)(count * 1000000 / frequency.LowPart),
    score_float);
fprintf(output, "Float Score = %i\n", score_float);
printf("Benchmarking ALU unit...\n");
//	__asm{int 3};
QueryPerformanceCounter(&startCount);	
//	for (n = 0; n < 2000000000; n++) {
//  nombre_int = nombre_int + 1;
//	}
__asm{
 nop
 nop
 nop
 xor  eax,eax
 mov  ebx,2000000000
 mov  ecx,1
int_loop:
 add  eax,1
 mul  ecx
 dec  ebx
 jnz  int_loop
}
QueryPerformanceCounter(&endCount);
count = endCount.QuadPart - startCount.QuadPart;
score_int = (long)(frequency.QuadPart * (LONGLONG)1000 / count);
printf("Int Count = %i\nInt Score = %i\n",
    (long)(count * 1000000 / frequency.LowPart),
    score_int);
fprintf(output, "Int Score = %i\n", score_int);
printf("Final Score =%i\n",
    (score_float + score_int));
fprintf(output, "Final Score =%i\n",
    (score_float + score_int));
//	__asm{int 3};
fclose(output);
return 0;
}

L'exe est dispo ici.

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...