begin process at 2012 02 13 03:34:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

bench


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

bench

samedi 26 avril 2008 à 13:14:57 | bench

draluorg

Salut a tous,

Voila je suis entrain de faire un ptit bench pour me faire une idee de la puissance "brute" d'un pc et je suis un peu surpris par les resultats
Deja le tableau donné par wiki me semble assez bizarre non ?
[ Lien ]
un p4 peut il vraiment faire 9700 millions d'operations/secondes ? ou bien ai-je une autre definition du mot operation ?

en plus de ne pas dutout optenir des resultats de l'ordre du tableau, je trouve bizarre 2 ou 3 points comme le fait que les doubles soient plus rapide que les int64 ?
Voici les resultats que j'obtiens exprimé en millons d'operation/s sur un x86

ProcesseurIntel(R) Pentium(R) 4 CPU 3.20GHz
Opérations arithmétiques (entiers 32 bits)181
Opérations arithmétiques (réels 32 bits)80
Opérations logiques (entiers 32 bits)714
Opérations binaires (entiers 32 bits)714
Opérations arithmétiques (entiers 64 bits)66
Opérations arithmétiques (réels 64 bits)119
Opérations logiques (entiers 64 bits)400
Opérations binaires (entiers 64 bits)333


voici le code d'une des fonctions a titre d'exemple, les autre sont codees de la meme facon:

__int64

ArithmTestEnt32()

{

LARGE_INTEGER start;

LARGE_INTEGER stop;

DWORD a32 = 5; DWORD b32 = 64; DWORD c32 = 0;

dwCurItt = 0;

QueryPerformanceCounter(&start);

DO:

c32 = dwCurItt++;

c32 /= a32; c32 -= b32; c32 *= a32; c32 += b32;

c32 /= a32; c32 -= b32; c32 *= a32; c32 += b32;

c32 /= a32;

if (dwCurItt != ITTER_ARRITHM_ENT) goto DO;

QueryPerformanceCounter(&stop);

return (__int64)(stop.QuadPart - start.QuadPart);

}

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
samedi 26 avril 2008 à 13:32:36 | Re : bench

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Tout sera faux pour cause de langage évolué, tu n'as pas la maitruise du code généré par le compilo donc impossible de mesurer le vrai nombre d'opérations faites.
Les benchs de ce genre ne peuvent se faire qu'en ASM.

ciao...
BruNews, MVP VC++
samedi 26 avril 2008 à 13:51:55 | Re : bench

draluorg

Salut BruNews,

Ok pour la maitrise du nombre d'operations, mais qu'en est il du fait que j'obtiens de meilleurs perf en double qu'en __int64 ? est-ce logique ?


Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
samedi 26 avril 2008 à 20:15:12 | Re : bench

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Surement normal du fait que la multiplication sur double (ou float) est inline dans le code alors que le CRT pour multiplication et division sur __int64 fait un call vers __llmul ou __lldiv.

__llmul , c'est 3 multiplications et 2 additions en interne, sans compter l'empilage, les transferts (MOV), le dépilage et le retour chez l'appelant.

ciao...
BruNews, MVP VC++
samedi 26 avril 2008 à 20:21:31 | Re : bench

draluorg

erf bin crotte! lol

ok je "comprends" mieux, bon bah j'ai plus qu'a aller me chercher une boite d'aspirine et de me casser la tete avec de l'asm!

Merci pour ces éclairesissements ;)

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
lundi 28 avril 2008 à 17:00:37 | Re : bench

draluorg

re,

bon j'ai tester en asm pour l'arithmetique 32 bits, je gagne 47 MIPS mais je suis encore loin du compte...

Mais eh quand tu dis asm, est-ce que cela fait une difference si c'est du inline genre:

__int64

ArithmTest()
{

DWORD i = 0;
LARGE_INTEGER start;
LARGE_INTEGER stop;

QueryPerformanceCounter(&start);

_asm
{

mov eax, 1050d
mov ebx, 8888d
mov ecx, 100000d
mov edx, 20d

DO:

mul ebx
add ecx, edx
div ebx
sub ecx, edx
mul ebx
add ecx, edx
div ebx
sub ecx, edx
add ecx, edx
sub ecx, edx
add i, 1

cmp i, 1000000d
jne

short DO
// mov b, ecx
}

QueryPerformanceCounter(&stop);

return (__int64)(stop.QuadPart - start.QuadPart);

}

enfin meme si ca faisait une difference ca ne devrait pas expliquer la montagne entre le tableau de Wiki et mes resultats

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
lundi 28 avril 2008 à 17:46:49 | Re : bench

BruNews

Administrateur CodeS-SourceS
Jamais d'ASM dans une fonction C, tu ne sauras toujours rien d'où le compilo sauvegarde les registres (avant ou après les perfCounters) ni rien d'autre. Une fonction doit être full ASM ou full C, jamais de mix.

__declspec(naked) ProtoFonctionIci();
pour full ASM.

ciao...
BruNews, MVP VC++
lundi 28 avril 2008 à 17:47:49 | Re : bench

BruNews

Administrateur CodeS-SourceS
Autre chose, pour les cycles c'est RDTSC depuis l'user mode.

ciao...
BruNews, MVP VC++
lundi 28 avril 2008 à 22:55:08 | Re : bench

draluorg

Ok merci beaucoup pour ces precisions :)

Et surement a bientot sur asmfr.com!


Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...


Cette discussion est classée dans : entiers, bits, c32, a32, b32


Répondre à ce message

Sujets en rapport avec ce message

Help me: grand nombres entiers [ par waza ] voila je suis en train de réaliser un programme de cryptage rsa mais le pb c ke je suis limiter a des entiers de 64 bits!! (avec __int64) et je me dem !!! Gestion d'entiers de 64 bits !!! [ par yoyo269 ] Bonjour à toutes et à tous.Je souhaite pouvoir gérer les entiers de 64 bits sous Dev-C++ (et je compte y rester).Pour cela j'utilise la déclaration de champ de bits [ par obasileus ] Bonjour,je souhaiterai savoir comment faire pour déclarer un champs de bits et pouvoir ensuite accéder à la structure complète genre :typedef struct{  Temps restant avant la prochaine journée [ par HeavenForsaker ] Bonjour,Je suis entrain de coder une fonction permettant de récuperer le temps restant avant la prochaine journée, pour se faire j'utilise la fonction champ de bits - tableau [ par gregounnet ] Bonjour,je souhaiterai savoir comment faire pour déclarer en C un champs de bits dans lequel je pourrais facilement me déplacer avec un flag, genre un Types compatibles [ par goast_tu ] Salut!vous savez s'il existe des types(entiers et flotants et entiers) qui sont compatibles entre windows et linux? si nn est il possible d'en créer u Bis: Binaire en C [ par fredleconte ] Réponse acceptée ! Mon problème n'est pas de convertir un nombre d'un base a l'autre mais de l'écrire comme en basic "%1010101" ou "%" désigne un nomb stocker des entiers appartenant à +rs lignes (chaines de caractères séparées par des espaces) dans un tableau à deux dimensions [ par alphabh ] Bonjour!je veux lire une ligne d'entiers depuis un fichier et stocker le contenu de ces lignes (une ligne contient des chaines de caractères séparées structure de données [ par eagleye ] je voulais savoir quelle structure de données à utilisé pour effectuer une intersection entre des entiers d'une manière efficace et rapide . sachant q grands nombres [ par freeskieuse ] Bonjour,je suis debutante en C++, j'ai un projet à faire, mais je ne sais pas du tout comment gèrer...SUJET:Pour la création d'entiers arbitrairement


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,827 sec (3)

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