Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Programmation _ Et si on faisait des outils de bench ?

Écrit par : Lionel 10 Feb 2004, 12:54

Actuellement, sur mac on a pas de bons outils de bench.
Est-ce que quelqu'un voudrait qu'on en fasse ?
J'ai quelques idées précises mais pas les connaissances suffisantes pour les réaliser.

Écrit par : Driden 10 Feb 2004, 13:12

Tu veux mesurer la performance hardware ou software ?

Écrit par : Mister euGene 10 Feb 2004, 13:30

Vas-y, balance tes idées, on arrivera bien à faire quelque chose biggrin.gif (je veux bien aider)

Écrit par : steve2408 10 Feb 2004, 13:40

Ce qui serait bien, c'est un utilitaire de Benchmark qui puisse réellement fonctionner sur Mac et PC, comme ça on pourrait enfin se mesurer wink.gif

Quoiqu'il vaut peut être mieux pas sad.gif

Écrit par : l0wc0der 10 Feb 2004, 16:34

Grande idée...j'ai déjà travaillé sur quelques bout de codes y'a pas longtemps, mais j'ai pas eu le temps d'aller plus loin...

Écrit par : Lionel 10 Feb 2004, 17:18

Bon, pour commencer, je voudrais un soft qui mesure le débit d'un périphérique.
Perfboard le fait déjà au niveau des IO en global.
Possible de le faire sur seulement un périf ?
Possible d'en faire un graph ?
On pourrait commencer par un lecteur ou graveur de CD ?

Voilà

Écrit par : l0wc0der 10 Feb 2004, 17:45

Oui c'est possible, il suffit de demander au noyau mach des infos pour chaque périphérique...je peux (modulo boulot) faire un petit programme de démo...

Écrit par : Lionel 10 Feb 2004, 17:54

Avec plaisir !!

Écrit par : dulrich 10 Feb 2004, 18:09

Et avec les sources qu'on puisse apprendre des chose wink.gif

Écrit par : Lionel 10 Feb 2004, 18:09

Remarquez, ce serait cool qu'on bosse tous ensemble dessus pour faire le MBBench smile.gif)

Écrit par : GillesB 10 Feb 2004, 18:54

Tout a fait d'accord.

Puis je suggérer de commencer par un mini cahier des charges?

Pour moi, il faut des tests qui soit liés à l'utilisation d'une machine:

Ouverture (temps de démarage à froid)

Ouverture de fichier

Conversion de format d'image

Encodage MP3


A vous les studios!!!!

Écrit par : dulrich 10 Feb 2004, 18:59

conversion et encodage sont trop liés à la qualité des codecs....

Écrit par : Lionel 10 Feb 2004, 19:49

QUOTE (dulrich1 @ 10 Feb 2004, 19:59)
conversion et encodage sont trop liés à la qualité des codecs....

oui, c'est vrai.
Il faudrait des choses plus élémentaires

Écrit par : GillesB 10 Feb 2004, 21:05

QUOTE (Lionel @ 10 Feb 2004, 19:49)
QUOTE (dulrich1 @ 10 Feb 2004, 19:59)
conversion et encodage sont trop liés à la qualité des codecs....

oui, c'est vrai.
Il faudrait des choses plus élémentaires

Temps pour déplacer le curseur de la souris du coin supérieur gauche au coin inférieur droit!

biggrin.gif

Je suis déja sorti!!!

Écrit par : Lionel 10 Feb 2004, 21:27

Je pensais à des fonctions mathématiques smile.gif

Écrit par : GillesB 10 Feb 2004, 21:40

de retour!

et si on mesurait le temps entre deux plantages!

"MBtest le seul bench qui dure 18 mois!!!"

Ok je ressort! biggrin.gif

Écrit par : MattbonD 10 Feb 2004, 21:42

première question : quelle genre de fonction mathématiques (système à résoudre,calcul de suite ...??
deuxième comment programmer la fonction ?? ( script terminal ou mini-appli )
cordialement

Écrit par : l0wc0der 10 Feb 2004, 21:55

Bon, j'arrive a avoir la vitesse IO pour chaque device...j'ai plus qu'a tracer le graphe... smile.gif
exemple
copie d'un vob du combo de mon ti sur le disque dur


CODE
2004-02-10 21:51:30.675 IOThroughput[7363] read: 7626709504 (12.332031 Mb/s) written: 7497116160
2004-02-10 21:51:30.676 IOThroughput[7363] read: 413488672 (4.250000 Mb/s) written: 0

Écrit par : Lionel 10 Feb 2004, 21:58

Tip top !!
Tu fais un graph avec une mesure par seconde ? Deux ?
Lecture en vert et écriture en rouge ?
Pour les CD, tu fais la conversion en X dans l'échelle ?
CD 1x = 150 Ko/s
DVD 1x = 1350 Ko
PAs trop pour ne pas risquer de ralentir le système.
Tu peux aussi faire une chtite interface pour choisir le périphérique de mesure ?

COOOOOOLLLLL

Écrit par : dulrich 10 Feb 2004, 22:35

QUOTE (Lionel @ 10 Feb 2004, 23:27)
Je pensais à des fonctions mathématiques smile.gif

J'ai un ou deux trucs en réserve.... de ce côté.

Du genre des classiques:
Tour de Hanoi (pour plus de 3 tours), en récursif ou pas ....
...

Mais le problème c'est surtout comment calculer le temps de calcul. Y aurait 2 possibilités:
Temps réel, avec un gettime avant la fonction et un après (on fait la différence)
désavantage:
si d'autres processus tournent, cela influence le temps de clacul.
Comptage du nombre de tick processeur (en très gros, le nombre de "cycle" (pas tout à fait en fait) pour faire le calcul):
avantage:si d'autres applis tournent (même à 90% du proc) celan ne devrait pas apparaître dans les tests
désavantage: c'est lié à l'architecture du CPU (mais ça me parait la meilleur solution)

On peut aussi imaginer avoir un bench en fortran, un en C, un en Java (pour la java, le C et même l'ada je dois avoir quelques codes dasn un bouquin d'algorithme, maispour la mesure.... j'ai pas).... et bien sûr les perfs varieront en fonction du compilateur utilisé....

[edit]il faut prévoir, si on boucle, une fonction qui vari au court du temps pour éviter la mise en cache....

Écrit par : Tilao 10 Feb 2004, 23:38

Bonsoir,

Pour un petit bentch qui tourne sur PC et Mac, j'ai peut être une idée. La c'est vraiment pour tester les perfs générales de la machine autour du Proc. C'est en Java, donc on teste tout, le proc, le système (bus système / ram ...) mais aussi le logiciel : ordonanceur de l'OS. Et Mac OS X est plutôt bien placé dans ce domaine. Bien entendu, c'est du Java, donc les tests ne sont pas super precis, mais ca donne un rapide apercu de la puissance de la machine.

Je suis partis d'un constat tout bête quand je fesais un programme. J'ai au boulot un AMD Athlon XP 1500+ (sous Linux je précise) et j'ai ramené au boulot le PB G3 400.

A la base, je travaillais sur un programme java assez gourmant en capacitées proc et par curiosité je l'ai mis sur le mac, qui ma fois ce débrouillais comme un charme smile.gif
En fait, en gros, tant que l'on ne fais pas d'interface graphique en Java, j'ai noté que la JVM d'apple est plutot performante !

Petit à petit j'ai peaufiné le test et j'en suis arrivé a faire un truc très basique !

Des millions de calculs sur des entiers / sur des entiers 64 bits / sur des réels (float)
(Il n'y a qu'un pas pour faire des fonctions mathématiques tongue.gif)

Et j'en suis arrivé à plusieurs constats :

-> Pour les entier, le PB n'avais pas à rougir de ses résultats.

-> Pour les entiers 64 bits, le PB ce faisait totalement larger, surement par un bus étroit et des fonctions de traitement très déaventageuses. Pas bien grave, le pauv' c un G3 biggrin.gif

-> Pour les réels Il me semble que le powerbook lui mettais la paté ! ('fin il était aussi rapide, si je me souviens bien ... pas mal pour un G3 400 sur portable !) (AMD par rapport à Intel est plutot meilleur en calcul flotant, donc si on test sur un intel !)

Bien que je ne me souviens plus trop des résultats, je peux refaire les programmes, c'est 4 lignes de code ! Donc indiscutable, tout le monde peux vérifier, pas de : Ah mais il on favorisé le mac (ou le pc). En plus Java n'utilise pas (il me semble) l'Altivec ou l'équivalent Intel/AMD (MMX / SEE etc). Cela présente donc une plateforme de bench qui positionne toutes les architectures au même niveau.

On pourrais tester la couche réseau par des benchs en RMI ou sockets (TCP et/ou UDP), les accès disque (la c'est surtout la perf de la JVM). Mais cela permet de faire un test très standard.

On pourrais aussi tester les perfs de l'OS, faire par exemple 5 000 threads en concurence, qui font plein d'interactions, donc plein de changement de contexte. On teste ici le multithreading du système (et de la jvm toujours). Pour pas avoir d'impact de la jvm on peux imaginer faire des threads en C, mais au moins avec Java, ca "standardise" et pas de discussions possible sur des optimisations smile.gif

On peux tester avec beaucoup de création d'objets, utilisation intensive de la mémoire, etc ... Donc tester la bande passante mémoire du système, le gestionnaire d'allacation mémoire, etc.

Pour finir, on fait un méga melange de tout ca, et on peux donner une note globale pour juger un ensemble Proc / Système Hard / Système d'Exploitation.

Je sais pas ce que vous en pensez, mais si ca vous plait, je peux faire divers petits protocoles de tests. Si vous penser à tester d'autres trucs que l'on puisse "stantardiser" avec l'aide de Java ?

On peux donc tester les performances de nos macs, et voir les gains et les pertes entre chaque évolutions, mais également les comparer avec d'aute architectures (Qui à une sation Solaris ou SGI ou ... ? biggrin.gif (ou un Palm tongue.gif))

Écrit par : dulrich 11 Feb 2004, 10:01

Pour les ticks:
http://developer.apple.com/documentation/mac/Toolbox/Toolbox-80.html

Bien que je commence à douter au niveau du calcul, il semblerait que cela compte le temps de vie du processus depuis son lancement, donc ce serait aussi sensible à ce qui tourne sur la machine... Y a quelqu'un pour infirmer ou confirmer?

Écrit par : Lionel 11 Feb 2004, 10:17

Génial !
Vous voir motivés me fait ultra plaisir !

Écrit par : dulrich 11 Feb 2004, 10:42

Je pose là un bout de code en c, on avait du faire un labo sur les suites de Fibonacci... Il y a la méthode récursive et itérative....
On a benché le tout avec la fonction gettimeofday.... qui est sensible à ce qui est en background, le code est pas forcément très beau tongue.gif (et pascal arrête de rire biggrin.gif ) :

CODE
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctime>
#include <sys/time.h>

using namespace std;


int i, j, nb_termes;
bool methode;
int  a = 1, b = 1, c = 1;


//declaration de la fonction Fibor : fibonacci recursive
int Fibor(int x)
{
   if (x == 0 || x == 1)       // cas particuliers
    return x;
   else if (x > 1)
    return (Fibor(x - 1) + Fibor(x - 2));
   else return 0;
}


//declaration de la fonction Fiboi : fibonacci iterative
int Fiboi(int x)
{
   if (x == 0 || x == 1)   // cas particuliers de la suite de Fibonacci
    return 1;
   else
   {
    for (j = 2; j <= x; j++)
    {
    a = b;      
    b = c;
    c = a + b;
    return c;
    }
   }
}



int main()
{  
   int i;
 
   struct timeval tp1;
   struct timeval tp2;

   double s1, s2, m1, m2;

   cout << "Calcul des nombres de Fibonnacci par deux methodes" << endl;
   cout << "--------------------------------------------------\n" << endl;
   cout << "\nChoix de la methode de calcul : entrez ""1"" pour la version iterative ou ""0"" pour la version recursive" << endl;

   cin >> methode;
   
   while (cin.fail())       //traitement des caracteres non souhaites (differents de 1 ou 0)
   {  
    cin.clear();
    while ( cin.get() != '\n');  
    cout << "\nErreur de saisie. Entrez ""1"" pour la version iterative ou ""0"" pour la version recursive\n";
    cin >> methode;
   }
   
   
     gettimeofday(&tp1,0);

   s1 = tp1.tv_sec;
   m1 = tp1.tv_usec;
   ////// methode recursive
   
   if (methode == 0)  
   {
    cout << "Entrez le nombre de termes souhaites" << endl;
    cin >> nb_termes;
    
    while (cin.fail() || (nb_termes < 0))      //traitement des caracteres non souhaites (non entiers positifs)
    {  
    cin.clear();
    while ( cin.get() != '\n');    
    cout << "\nErreur de saisie. Entrez un nombre de termes positif et entier\n";
    cin >> nb_termes;
    }    
    
    
    cout << "\nSuite de Fibonacci (recursive)\n\n";
    
    cout << "n  F(n)      \n";
    cout << "-------------\n";
    
    for (i = 0; i <= nb_termes; i++)
    {
    cout << setw(2) << i << " " << setw(-10) << Fibor(i) << endl;
    //printf("%-2d %-10d\n", i, Fibor(i));
    }
   }
   
   ////// methode iterative
   
   else if (methode == 1)
   {
    cout << "Entrez le nombre de termes souhaites" << endl;
    cin >> nb_termes;
    
    while (cin.fail() || (nb_termes < 0))      //traitement des caracteres non souhaites (non entiers positifs)
    {  
    cin.clear();
    while ( cin.get() != '\n');    
    cout << "\nErreur de saisie. Entrez un nombre de termes positif et entier\n";
    cin >> nb_termes;
    }  
    
    cout << "\nSuite de Fibonacci (iterative)\n\n";
    
    cout << "n  F(n)      \n";
    cout << "-------------\n";
    for (i = 0; i <= nb_termes; i++)
    {
    cout << setw(2) << i << " " << setw(-10) << Fiboi(i) << endl;
    }
   }
   gettimeofday(&tp2,0);
 
   s2 = tp2.tv_sec;
   m2 = tp2.tv_usec;
 
   cout << "Le temps d'execution est " << s2-s1+(m2-m1)/1000000 << "sec.\n";
   return 0;

}


y a sûrement mieux qu'une suite de fibo pour les benchs, quelque chose de plus complet....

Écrit par : l0wc0der 11 Feb 2004, 10:57

Alors hier soir j'ai abouti à ça pour les mesures de vitesses...c'est moche, je me suis pas embeté pour l'instant
http://www.lowcoders.net/franck/essai1.jpg la vitesse de lecture de mon combo drive lorsque je copie 700 Mb (1 fichier sur le disque). L'application marche pas mal...1 point par seconde (utilisation très faible du CPU). C'est un début...je vais faire mieux ce soir smile.gif

Écrit par : Mister euGene 11 Feb 2004, 12:03

Pour dulrich1 :
Pour obtenir le temps il y a la fonction getrusage aussi (faire un man), mais en gros on peut avoir le temps process user et le temps system, si en plus on fait un gettime on peut peut être pondérer tous les résultats entre eux ?

Écrit par : apprenti bidouille 11 Feb 2004, 12:49

QUOTE (dulrich1 @ 11 Feb 2004, 10:01)
donc ce serait aussi sensible à ce qui tourne sur la machine...

bon, alors on fait un truc qui demande au démarrage de quitter toutes les applis en cours d'utilisation... déjà ça limitera une bonne partie de l'activité de la machine nan ?

Écrit par : Lionel 11 Feb 2004, 12:56

QUOTE (apprenti bidouille @ 11 Feb 2004, 13:49)
QUOTE (dulrich1 @ 11 Feb 2004, 10:01)
donc ce serait aussi sensible à ce qui tourne sur la machine...

bon, alors on fait un truc qui demande au démarrage de quitter toutes les applis en cours d'utilisation... déjà ça limitera une bonne partie de l'activité de la machine nan ?

On pourrait même lister les process en cours et désactiver tous ceux qui ne sont pas indispensables.
Ensuite soit reboot soit on les relance.

Écrit par : Lionel 11 Feb 2004, 12:59

QUOTE (l0wc0der @ 11 Feb 2004, 11:57)
Alors hier soir j'ai abouti à ça pour les mesures de vitesses...c'est moche, je me suis pas embeté pour l'instant
http://www.lowcoders.net/franck/essai1.jpg la vitesse de lecture de mon combo drive lorsque je copie 700 Mb (1 fichier sur le disque). L'application marche pas mal...1 point par seconde (utilisation très faible du CPU). C'est un début...je vais faire mieux ce soir smile.gif

ça a déjà de la gueule.

Pour plus tard, ce serait pas mal d'ajouter une fonction de lecture de N octets d'un disque dur et surtout une fonction de lecture de tout un CD ou DVD. on fait lire tous les secteurs dans l'ordre.
Ainsi on pourra juger la qualité d'une gravure de CD ou DVD grâce à la régularité du débit.

Écrit par : Faquin 11 Feb 2004, 13:14

QUOTE (Lionel @ 11 Feb 2004, 12:56)
QUOTE (apprenti bidouille @ 11 Feb 2004, 13:49)
QUOTE (dulrich1 @ 11 Feb 2004, 10:01)
donc ce serait aussi sensible à ce qui tourne sur la machine...

bon, alors on fait un truc qui demande au démarrage de quitter toutes les applis en cours d'utilisation... déjà ça limitera une bonne partie de l'activité de la machine nan ?

On pourrait même lister les process en cours et désactiver tous ceux qui ne sont pas indispensables.
Ensuite soit reboot soit on les relance.

plus simple: on peut les freezer. Comme ca à la fin on libère tout et c'est transparent pour l'utilisateur.

Mais bien faire attention de ne pas freezer le defreezeer, sinon c'est le gros bouton blanc sur la machine qu'il faudra activer wink.gif

Écrit par : djaconil 11 Feb 2004, 13:15

QUOTE (dulrich1 @ 11 Feb 2004, 10:42)
y a sûrement mieux qu'une suite de fibo pour les benchs, quelque chose de plus complet....

Moi je pense à un calcul de fft sur 4096 points par exemple. Mais il faut pondre le code.

Écrit par : buserror 11 Feb 2004, 13:57

QUOTE (djaconil @ 11 Feb 2004, 12:15)
QUOTE (dulrich1 @ 11 Feb 2004, 10:42)
y a sûrement mieux qu'une suite de fibo pour les benchs, quelque chose de plus complet....

Moi je pense à un calcul de fft sur 4096 points par exemple. Mais il faut pondre le code.

Bah, 4096 ? c'est du gateau. Je fais facile du 16k points dans FFTea, et la machine est loin d'etre a genoux.

Écrit par : GregWar 11 Feb 2004, 15:42

QUOTE (Tilao @ 10 Feb 2004, 22:38)
Bonsoir,

Pour un petit bentch qui tourne sur PC et Mac, j'ai peut être une idée. La c'est vraiment pour tester les perfs générales de la machine autour du Proc. C'est en Java, donc on teste tout, le proc, le système (bus système / ram ...) mais aussi le logiciel : ordonanceur de l'OS. Et Mac OS X est plutôt bien placé dans ce domaine. Bien entendu, c'est du Java, donc les tests ne sont pas super precis, mais ca donne un rapide apercu de la puissance de la machine.

Je suis partis d'un constat tout bête quand je fesais un programme. J'ai au boulot un AMD Athlon XP 1500+ (sous Linux je précise) et j'ai ramené au boulot le PB G3 400.

A la base, je travaillais sur un programme java assez gourmant en capacitées proc et par curiosité je l'ai mis sur le mac, qui ma fois ce débrouillais comme un charme smile.gif
En fait, en gros, tant que l'on ne fais pas d'interface graphique en Java, j'ai noté que la JVM d'apple est plutot performante !

On peux donc tester les performances de nos macs, et voir les gains et les pertes entre chaque évolutions, mais également les comparer avec d'aute architectures (Qui à une sation Solaris ou SGI ou ... ? biggrin.gif (ou un Palm tongue.gif))

Je ne suis pas sur qu'un bench en Java soit le plus adapté pour tester la vitesse d'un mac…
Tu vas surtout tester l'efficacité de la JVM, ce qui veut tout et rien dire (meme si pour ma part, je serais partant pour un bench des différentes JVM, mais C un autre sujet).

D'autant plus que d'une JVM a l'autre les résultats different bcp :
http://www.osnews.com/story.php?news_id=5602&page=1
(attention je ne critique pas JAVA, j'en fais toute la journée, et j'en suis tres content)


Je pense que évaluer la vitesse d'un mac, il faudrait plutot utiliser les API natives, la couche graphique native, etc… il existe déjà des tests touts simples, orientés utilisateurs, qui sont assez parlant, du genre : mesurer le temps de fermeture de 1000 fenetre du finder…

Pour des tests plus scientifiques/techniques, il faut faire attention à ne pas faire qqc qui dépende du compilo (typiquement sur des parcours d'arbres, des calculs complexes, ou certaines options sont profitables a certaines architecture et pas à d'autre)… et ceci est particulierement en ces temps ou l'on trouve encore des G3, mais surtout des G4 et G5 qui ont un nombre différents d'unités de calcul vecto, en plus de l'archi 64bits… pas simple du tout d'etre objectif !!!

Écrit par : dulrich 11 Feb 2004, 17:10

Je crois au contraire qu'il faut fournir une grande variété de test, c'est à dire du java, du c et du fortran. De cette manière on peut évaluer les machines selon tous les critères. On peut y ajouter des tests spécifiques sur altivec, flottant, entier etc.... du moment qu'on donne un résultat pour chaque test et qu'on ne combine pas tout.
On pourra voir ainsi quelles sont les améliorations apportées aux machines, ce qu'elles représentent dans les faits.... sinon autant listr simplement les GHz.... c'est pas le but.

Écrit par : apprenti bidouille 11 Feb 2004, 17:13

Entièrement d'accord, il nous faut un truc très varié, sinon ça ne sert à rien !

Écrit par : dulrich 11 Feb 2004, 17:30

QUOTE (l0wc0der @ 11 Feb 2004, 12:57)
Alors hier soir j'ai abouti à ça pour les mesures de vitesses...c'est moche, je me suis pas embeté pour l'instant
http://www.lowcoders.net/franck/essai1.jpg la vitesse de lecture de mon combo drive lorsque je copie 700 Mb (1 fichier sur le disque). L'application marche pas mal...1 point par seconde (utilisation très faible du CPU). C'est un début...je vais faire mieux ce soir smile.gif

tu peux filer les sources?

Sinon pour le temps, il y a en effet d'autres applications.... Je suis en train de lire quelques pages de man, mais je ne trouve pas de vrai équivalent à GetTick() sur PC.....

Écrit par : Lionel 11 Feb 2004, 17:34

Si tu pouvais m'envoyer une béta de ton soft.
C'est pour mettre en évidence la différence de vitesse de gravure du Nec et du Pioneer.
Merci

Écrit par : GregWar 11 Feb 2004, 19:31

QUOTE (dulrich1 @ 11 Feb 2004, 16:10)
Je crois au contraire qu'il faut fournir une grande variété de test, c'est à dire du java, du c et du fortran.

Le truc avec Java, C que ton programme peut ne pas changer d'une ligne et ses perfos évoluer énormément !

Si on reprend mon lien de tout à l'heure on voit que (sur PC) la JVM 1.4 est 2x plus lente sur les calculs trigo que la 1.3… ca veut donc dire, en grossissant un peu les choses, qu'une machine 2x plus perfo, plus récente mais disposant d'une nouvelle JVM moins adaptée au problème précis que tu traites serait seulement l'égale de son ainée…

J'en ai déjà parlé dans les fora, mais sur une appli JAVA de test AWT & SWING hyper basique, mon PC Athlon 1GHz fait >60fps, alors que mon iBook 700 Ati7500 fait du 6 à 7 fps… le rapport n'est pas du tout réaliste ! Ce n'est pas le hard le probleme, mais bien la couche graphique JAVA d'Apple.

bref, qqpart ce serait comme comparer des movies Flash… on risque d'oublier les versions du player lorsque l'on juge 2 machines.

Écrit par : Lionel 11 Feb 2004, 19:35

Et un gros calcul de N décimales de Pi ?
C'est universel ça

Écrit par : apprenti bidouille 11 Feb 2004, 19:37

héhé, un petite valeur approchée à 10000 décimales !!

Écrit par : macmagna 11 Feb 2004, 21:44

Pour ceux que le calcul de PI interesse, j'ai récupéré un source basique et facilement adaptable qui fait le boulôt:

http://macmagna.free.fr/public/PI.dmg

J'ai juste ajouté les lignes post-commentées par MM dans main pour avoir une idée des perfs.
Ce qui est étonnant c'est que la moyenne n'est pas constante et diminue avec l'augmentation du nombre de décimales. Si qqun peut m'expliquer ça?
J'ai chez moi par ex:
Digits: 1000 - Time: 0.043968s - Rate: 22744/s
Digits: 10000 - Time: 2.838359s - Rate: 3523/s
Digits: 20000 - Time: 13.870423s - Rate: 1442/s

Edit: Le lien original http://mathforum.org/library/drmath/view/54343.html

Écrit par : Tilao 11 Feb 2004, 21:54

Oui, c'est tout à fait normal,

Le calcul du nombre Pi ne tiens pas dans un registre mémoire, dans un réel par exemple (qui d'ailleur fausserait l'approximation, il me semble)

Le calcul de Pi ce fait sur un ensemble de variables contenues dans un tableau. Plus tu calcule de décimales de Pi, plus le nombre est grand, plus le nombre de variable utilisés est important.

Pour faire très simple, au début, on fait un calcul sur une variable

Par exemple x = x + 1; C'est le BA B.A, c'est très rapide.

Si tu depasse la capacité de x, tu crée deux variables, x1 et x2 et en gros tu as

x1 = x1 + 1;
Si (x1 à eut un dépassement de capacité) {
x2 = x2 + dépassement de capacité;
}

ensuite tu passe à trois variable, puis 4, puis des 10 aines, de 100 aines, etc

Donc au début faire un calcul etait très rapide, en gros une opération du processeur. Ensuite tu dois faire des 100 aines d'opérations au niveau "algo et matériel" pour une opération "mathématique".

Donc ton programme ralenti.

Écrit par : No6 11 Feb 2004, 22:15

Hello,
J'ai appercu des Benchs de compilateurs ADA,
mis à partl'aspect performance, il y avait aussi un controle des résultats, de la précision.
mon petit grain de sel...

Écrit par : blueG3 11 Feb 2004, 22:15

pour les tets il faut differentier
1) le calcul en virgule flottante ( la reine incontesté dans ce domaine le fortran )
2) le calcul avec des entiers

dans les 2 cas , faire attention au nombre de bits utilisés , car la quantité de memoire va fluctuer et donc fausser les resultats.

le probleme du compilateur est crucial , car il ne faut pas des optimisdations de codes qui avantagent une machine , plus qu'une autre ( du coup altivec est a mettre de coté)

eviter dans la mesure du possible , de faire des calculs sur une utlisation de memoire faible , la memoire cache va fatalement provoquer de grand ecarts.

effectuer un calcul sur plusieurs minutes , cela permets de mieux mesurer la performance.

je penses dans le cas avec des entiers differents algorithmes de tris , ( les optimisations des compilos vont forcement passer par là) , mais sur une volumetrie suffisemment importante ( evidemment le type de gestion de fichiers differents va fausser la aussi le resultat , genre optimisation fichier sur index....)

eviter les declarations de type union sur pc qui favorisent un gain, de place memoire , ce n'est pas forcement le cas sur une machine big endian ( pour des raisons d'alignements en memoire )
--> ce point est systematiquement utilisé coté PC , mais partir d'un meme source avec des options de compilation identique devrait mettre une egalité sur ce point.

Écrit par : apprenti bidouille 11 Feb 2004, 22:21

QUOTE (blueG3 @ 11 Feb 2004, 22:15)
( du coup altivec est a mettre de coté)

C'est là on je pense qu'il faut qu'on se décide, soit on essaie de faire un truc très objectif, mais qui ne tient pas forcément compte de ce que font réellement les utilisateurs, soit on fait un truc sans doute moins *officiel*, mais qui se préoccupe des besoins réels... si quelque chose de souvent utilisé par l'utilisateur est fortement aidé par l'altivec, on le met quand même dans le test, puisque c'est quelque chose qui touche vraiment l'utilisateur final... Ce serait plutôt ma philosophie... ce serait vrai dans l'autre sens, si quelque chose que fait souvent l'utilisateur est favorisé par une architecture intel, on le mettrait quand même.

J'ai pas l'impression d'être très clair... sad.gif

Écrit par : dulrich 11 Feb 2004, 22:36

QUOTE (GregWar @ 11 Feb 2004, 21:31)
QUOTE (dulrich1 @ 11 Feb 2004, 16:10)
Je crois au contraire qu'il faut fournir une grande variété de test, c'est à dire du java, du c et du fortran.

Le truc avec Java, C que ton programme peut ne pas changer d'une ligne et ses perfos évoluer énormément !

Si on reprend mon lien de tout à l'heure on voit que (sur PC) la JVM 1.4 est 2x plus lente sur les calculs trigo que la 1.3… ca veut donc dire, en grossissant un peu les choses, qu'une machine 2x plus perfo, plus récente mais disposant d'une nouvelle JVM moins adaptée au problème précis que tu traites serait seulement l'égale de son ainée…

J'en ai déjà parlé dans les fora, mais sur une appli JAVA de test AWT & SWING hyper basique, mon PC Athlon 1GHz fait >60fps, alors que mon iBook 700 Ati7500 fait du 6 à 7 fps… le rapport n'est pas du tout réaliste ! Ce n'est pas le hard le probleme, mais bien la couche graphique JAVA d'Apple.

bref, qqpart ce serait comme comparer des movies Flash… on risque d'oublier les versions du player lorsque l'on juge 2 machines.

Cela importe peu... je parle pas de graphique, mais de calcul mathématique.
On ne veut pas évaluer juste les perfs du proc, sinon, comme j'ai dis, on lit les MHz et ça suffit... mais on veut aussi voir, avec un code semblable dans lusieurs langages, ce que vaut le compilateur ET le proc....
On peut faire des calculs de plusieurs sortes... qui prennent l'aspect globale du CPU.

C'est clair qu'on va pas tester quartz avec du Java.

je suis POUR un test d'altivec, et pourquoi ne simplement pas le séparer du reste? Faire un test qu'altivec (ça permettrait de voir les progrès du G5 en la matière).

sinon pour une idée des problèmes du au cache:
http://madchat.org/coding/c/hack_processeur_en_C.html

Écrit par : macmagna 11 Feb 2004, 22:43

Ne pourrait-on pas faire un bench CPU avec quelque chose de trés simple comme:

CODE
#include <stdio.h>
#include <sys/time.h>

int main (int argc, const char * argv[])
{
   struct timeval begin, end;
   float elapsed;
 
   int count = 100000000, i = count, j = 1;
   
   gettimeofday (&begin, NULL);

   while (i--)
       j += j;
   
   gettimeofday (&end, NULL);
   elapsed = (float)(end.tv_sec - begin.tv_sec) + ((end.tv_usec - begin.tv_usec) / 1000000.0);
   printf("Count: %d - Time: %fs - Rate: %.0f/s\n", count, elapsed, ((float) count) / elapsed);

   return 0;
}


On pourrait mettre ce qu'on veut dans la boucle while, calculer sur un float, etc...
Et en assembleur avec le même nombre d'instructions pour les programmes PC et Mac?

Écrit par : kakace 11 Feb 2004, 22:45

Vouloir comparer, via des benchmarks, des architectures fondamentalement différentes avec le même code ne mène nul part. Pour une tâche donnée, on peut écrire du code qui fonctionne mieux sur une architecture que sur une autre, ou avoir un impact bénéfique sur l'une et pas sur l'autre, y compris lorsque l'algo est le même.
J'ai eu le cas avec du code écrit pour résoudre un challenge ECC (Eliptic Curves). Après avoir apporté des modifs triviales (réorganisation du code, principalement), les performances sur G4 étaient multipliées par trois, alors qu'elles évoluaient à peine sur AMD/Intel.

La seule façon de faire est d'utiliser des algos optimisés au maximum pour chaque plateforme, même s'ils sont différents, de façon à obtenir les performances maximales et savoir qui fait quoi mieux que l'autre. Faute de quoi les benchs sont biaisés d'entrée de jeu et ne signifient plus grand chose d'un point de vue pratique.

Tout dépend de ce que vous voulez faire.

Écrit par : buserror 11 Feb 2004, 22:46

Le calcul de Pi, le code tiens dans le cache, et c'est inutile. En plus ca n'a vraiment rien a voir avec la "vraie vie" et franchement, un bench qui est bon a quelque chose que je ne fais JAMAIS je m'en tapes pas mal!

Moi je suggere un filtre image de type gaussian, sur une petite matrice par exemple 3x3 pour tester le rapport scalaire/altivec, et ensuite pousser sur des matrices plus grosses si ont veut tester le scalaire a fond.

Un filtre image de ce type s'appuye a fond sur le nombre de registres, la qualite du scheduler, et aussi beaucoup sur la bande passante du bus et l'efficacité du cache.

Je suis pret a donner un gaussian 3x3 tout altivec qui travaille en natif sur de la video YUV 422.

Aussi, je suis pas manchot a ecrire de l'altivec direct, si jamais vous avez des trucs a vectoriser.

Écrit par : l0wc0der 12 Feb 2004, 07:32

Alors, voilà:

J'arrive à avoir les vitesses de transfert de données pour un Disque dur en read/write...mais j'arrive pas à avoir la vitesse de gravure d'un CD/DVD par ma méthode (que la vitesse de lecture sad.gif ) . J'explique ce que je fait, je récupère avec IOKit les propriétés de tous les éléments qui correspondent à IOBlockDeviceDriver...ce qui me permet de récupérer les bytes lu/écrit...il faut encore que je travaille un peu pour arriver à obtenir la vitesse de gravure.

Sinon, j'ai remarqué un truc rigolo...si j'extraie un fichier d'un DVD en le copiant sur le disque à partir du finder et bien à ma grande surprise l(bon pas si grande que ça) le disque dur ne fait pas qu'écrire mais en même temps il lit beacoup de donnée -> correction d'erreur?
Avec "cp" dans le terminal que dalle, que de l'écriture...on voit aussi bien comment le multitache préemptif influence la vitesse de lecture/écriture...

Bon, pour ce qui est du code, c'est un peu compliqué...j'ai une version Cocoa et une version Carbon Mach-o...je préfère la version carbon car c'est plus simple à mon goût d'utiliser la bibliothèque standard C++. Je suis disposé à vous donner le code mais je pense que le truc bien à faire est de créer un projet sur sourceforge...c'est quand même plus agréable de pouvoir utiliser CVS wink.gif

Pour ce qui est des benchs CPU, je suis d'accord avec buserror...en ce moment je donne des cours de simulation numérique à la fac et j'ai pas mal d'algorithmes en stock, mais il faut être franc la plupart ne sont pas significatifs de l'utilisation courante d'un ordinateur...
Ensuite, et là je rejoint kakace...pas la peine d'espèrer obtenir des benchs multiplateforme avec un seul code...de toute façon si on veut vraiment éviter des remarques du type "ils utilisent pas le compilo d'intel", etc... il y pas 36 façon de faire...assembleur très bien écrit wink.gif hehe

Écrit par : dulrich 12 Feb 2004, 08:36

je comprend tout à fait vos point de vue, si je n'ai pas tout à fait le même c'est que je ne pense pas tester la même chose que vous.

Question compilateur, si on utilise gcc sur les deux plateformes il devrait avoir à peu prêt équité.

Pour l'assembleur et le ocde altivec j'ai encore quelques années d'études devant moi tongue.gif , donc pour ça je peux pas aider biggrin.gif .

Écrit par : Einstein 12 Feb 2004, 13:03

QUOTE (Faquin @ 11 Feb 2004, 13:14)
QUOTE (Lionel @ 11 Feb 2004, 12:56)
QUOTE (apprenti bidouille @ 11 Feb 2004, 13:49)
QUOTE (dulrich1 @ 11 Feb 2004, 10:01)
donc ce serait aussi sensible à ce qui tourne sur la machine...

bon, alors on fait un truc qui demande au démarrage de quitter toutes les applis en cours d'utilisation... déjà ça limitera une bonne partie de l'activité de la machine nan ?

On pourrait même lister les process en cours et désactiver tous ceux qui ne sont pas indispensables.
Ensuite soit reboot soit on les relance.

plus simple: on peut les freezer. Comme ca à la fin on libère tout et c'est transparent pour l'utilisateur.

Mais bien faire attention de ne pas freezer le defreezeer, sinon c'est le gros bouton blanc sur la machine qu'il faudra activer wink.gif

J'veux pas faire le ch*eur, mais le fait de freezer une appli de libère pas la mémoire qui lui est allouée, or si on fait des test mémoires, je ne pense pas que ça puisse être bénéfique, non?

Écrit par : dulrich 12 Feb 2004, 13:05

[mode second degré]
et si on faisait des scripts firmware pour les benchs?

ou alors on refait un OS minimal?
[/mode second degré]

Écrit par : apprenti bidouille 12 Feb 2004, 13:07

clair j'en ai marre de os X
je propose que nous nous lancions dans MB OS ! ®©™ biggrin.gif laugh.gif

Écrit par : bortek 12 Feb 2004, 14:38

Moi pour l'outil MBBench, je peux juste vous aider pour l'icone et le design si vous avez besoin.

Écrit par : Maconnect 12 Feb 2004, 17:15

pour le calcul du temps, Microseconds() n'est-il pas mieux adapté que les ticks? Ces dernière ne sont pas précises

Écrit par : l0wc0der 13 Feb 2004, 21:06

Bonsoir

Si il y a toujours des interesses, on pourrait en discuter sur le chat irc de macbidouille...j'y suis ce soir. C'est plus simple de discuter en live...

A bientôt

Écrit par : Kisco 15 Feb 2004, 12:39

QUOTE (dulrich1 @ 11 Feb 2004, 10:42)
On a benché le tout avec la fonction gettimeofday.... qui est sensible à ce qui est en background, le code est pas forcément très beau tongue.gif (et pascal arrête de rire biggrin.gif )

wink.gif

Écrit par : l0wc0der 21 Feb 2004, 17:44

Bon, y'a vraiment plus que moi d'intéréssé?

Écrit par : apprenti bidouille 21 Feb 2004, 21:19

non non, je soutiens le projet ! mais je ne peux pas apporter grande aide au développement, à part tester les versions wink.gif

Écrit par : Maconnect 21 Feb 2004, 21:35

moi je trouve ça cool aussi. Mais j'ai pas beaucoup de temps, et je m'y connais peu en hardware. je peux aider pour avoir des infos sur les périphs,...

Écrit par : labon 10 Nov 2004, 00:46

Hop, je creuse, je cherche et... je détère des sujets.

Bon, moi, j'y connait rien en programation à part faire des mini bidouilles en Apple script.

Mais vous en êtes ou les gars. Ca avait l'air bien parti votre projet. Serait t'il mort né, ou ça se passe ailleurs ???

Écrit par : l0wc0der 10 Nov 2004, 07:47

QUOTE(labon @ 10 Nov 2004, 00:46)
Hop, je creuse, je cherche et... je détère des sujets.

Bon, moi, j'y connait rien en programation à part faire des mini bidouilles en Apple script.

Mais vous en êtes ou les gars. Ca avait l'air bien parti votre projet. Serait t'il mort né, ou ça se passe ailleurs ???
[right][snapback]913350[/snapback][/right]

A mon avis c'est mort né...moi je suis toujours interessé en tout cas biggrin.gif

Écrit par : __toto__maison 12 Nov 2004, 13:49

Y adéja des truc facile a faire : copie de fichier par les différents OS. Il suffit de se mettre d'accord sur un Dossier dde 1 Go contenant un fichier de 500Mo et une suite de fichiers de plus en plus pett.

Écrit par : labon 25 Nov 2004, 12:30

bref, y pu ka, c'est ça ? laugh.gif

Écrit par : protheus 19 Dec 2004, 03:41

Y'a un truc redoutable et multi-plateforme pour des tests CPU:

openssl speed

...

Écrit par : __toto__maison 15 Dec 2006, 23:37

CITATION(labon @ 25 Nov 2004, 12:30) [snapback]930405[/snapback]

bref, y pu ka, c'est ça ? laugh.gif


C'est fait laugh.gif
http://forum.macbidouille.com/index.php?act=Attach&type=post&id=13830

Écrit par : __toto__maison 16 Dec 2006, 02:09

Résultats par ici :
http://guertrude.ifrance.com/benchit/result.php

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)