Performance d'un PC

amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010 - 22 déc. 2009 à 20:34
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 janv. 2010 à 16:01
salut mes amis
svp si quelqu'un peut m'aider j'ai besoin d'un algorithme qui teste les performances d'un Pc ou bien un programme en C ou C++

22 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 déc. 2009 à 22:42
pourquoi en ce cas poster ta question sur un forum VB, et non sur [www.cppfrance.com cppfrance.com] ? (je déplace ton post)

les performances dans un domaine précis ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
24 déc. 2009 à 12:28
Salut,

Tu peux écrire un bout de code et le chronométrer.
En fonction de ce que fait le code, tu testes telle ou telle autre capacité du PC.
Mais il y a de nombreux pièges : temps de montée en puissance, multi-coeurs, consommation de CPU par un autre processus, opération sur le disque impromptue...
Et quoiqu'il en soit, pour avoir des points de comparaison, il faudrait l'exécuter sur plusieurs PCs.

Par exemple, dans le code suivant, j'ai regardé le temps pour faire un milliard de fois un enchaînement d'une multiplication, addition, et affectation.

#include <stdio.h>
#include <time.h>

#define OP_COUNT 100000000
#define TIMES 10

int main ()
{
  clock_t nBeginning;
  clock_t nEnd;
  clock_t nCorrection;
  long nResult;
  long a;
  long nI;
  long nJ;

  nResult = 0;
  for (nJ = 0; nJ < TIMES * 2; nJ++)
  {
    /* Calcul du temps passé à boucler */
    nBeginning = clock();
    for (nI = 0; nI < OP_COUNT; nI++)
    {
    }

    nCorrection = clock() - nBeginning;
    printf("Correction = %d\n", (int)nCorrection);

    nBeginning = clock();
    for (nI = 0; nI < OP_COUNT; nI++)
    {
      a = a + a * a;
    }

    nEnd = clock() - nBeginning;
    printf("Total = %d\n", (int)nEnd);

    nEnd = nEnd - nCorrection;
    
    /* On ne prend en compte que la deuxième moitié des tests */
    if (nJ >= TIMES)
      nResult += nEnd;

    printf("Temps de calcul = %d\n", (int)nEnd);
  }

  printf("Moyenne = %ld clocks\n", nResult / TIMES);
  printf("CLOCKS_PER_SEC = %ld\n", CLOCKS_PER_SEC);
  printf("Temps pour %d d'operations = %f secondes\n", OP_COUNT * TIMES, (float)nResult / CLOCKS_PER_SEC);

  return 0;
}


C'est loin d'être parfait, mais je suppose que pour se faire une idée, c'est un début.
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
24 déc. 2009 à 20:08
salut
premièrement merci pour le programme mais je suis besoin de quelque explication concernant les mots utilises et qu'est-ce qu'il signifie par exemple clock-per-sec
en general est-ce que vous pouvez ajouter qlq commentaires c'est urgent
et merci beaucoup pour vous aide
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
25 déc. 2009 à 09:44
Le "c'est urgent" est généralement très mal vu sur ce forum.
On est bénévole, et qui plus est, le 24/25 décembre, en France, on est pas forcément très opérationnels...

Comme je l'ai expliqué, il s'agit d'un chronométrage de code.
Pour chronométrer, il faut une horloge.
J'utilise celle-ci.
Elle a l'avantage d'être portable, tout en ayant une précision de l'ordre de quelques millisecondes sous Windows.

Le code testé est le suivant :
a = a + a * a;


Cependant, ce genre de code s'exécute en moins d'une milliseconde. Donc ce que je chronomètre, c'est cent millions de fois ce code. Donc je le mets dans une boucle.

Mais s'il est dans un boucle, le temps passé à exécuter le code de la boucle (le for) est lui aussi chronométré, et non négligeable. Donc je fais une première boucle vide de cent millions d'itérations pour déterminer combien de temps de est passé dans la boucle (Et dans le code de chronométrage !). Je récupère ainsi une valeur de correction que je soustrais à la boucle incluant le calcul. Ce n'est pas top pour la précision des mesures, mais ce n'est pas évident de faire mieux...

Je calcule aussi une valeur moyenne et une durée pour le milliard d'opérations.
Mais pour la calculer, je ne prends pas en compte la moitié des valeurs (Je fais 20 tests et ne prend que les 10 derniers résultats). De cette manière, je décrasse le processeur. Je le fais chauffer un peu quoi. Cela peut s'avérer intéressant tout spécialement si le processeur dispose d'un système d'économie d'énergie. En fin de compte, je m'arrange pour que le processeur soit en vitesse de pointe et ne m'intéresse pas à sa capacité d'accélération.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
10 janv. 2010 à 17:17
salut tout le monde
est-ce que quelqu'un connait quel sont les performances du PC que je peux tester
merci d'avance
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 janv. 2010 à 17:28
Bin la vitesse processeur, ça reste l'une des plus importante il me semble.
La quantité de RAM, c'est important aussi, quoique ça se mesure plus facilement !
Tu peux aussi faire des essaies de grosse lecture/écriture sur le disque.
Des déplacement de gros blocs de mémoire (Gros memcpy).
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
10 janv. 2010 à 17:33
est-ce que vous connaissez la surveillance des performances du PC
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 janv. 2010 à 18:06
Sous windows, tu as les compteurs de perf.
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 15:52
salut
stp pour le programme que tu m'as déjà envoyé est-ce que #define time10 désigne un tableau
une autre chose quel est le role du OP-count
je travaille avec turbo C et j'ai pas dans la librairie du C windows.h et autre . est-ce qu'il ya une methode pour inclure windows.h dans la libairie
merci beaucoup
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 janv. 2010 à 15:59
#define TIMES 10

Cela demande au préprocesseur C (Exécuté avant la compilation) de remplacer les occurrences de "TIMES" dans le code par 10.

Ecrire :
#define MSG "Hello world"
...
printf(MSG);

Revient à écrire :
printf("Hello world");


OP_COUNT représente le nombre d'opération/de calcul. "for i de 0 à OP_COUNT -1".

Il n'est a ma connaissance pas possible d'utiliser windows.h dans une antiquité telle que turbo C.
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 16:16
quand je veux executer ce programme un msg d'erreur apparait :"indefined symbol 'clock_per_sec' in function main"
comment je peux regler ce probleme
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 janv. 2010 à 16:20
Tu as bien CLOCKS_PER_SEC dans ton code ?
En majuscule et avec un "s" à clock ?
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 16:25
oui j'ecris CLOCKS_PER_SEC mais le probleme qu'il m'affiche infedined function in main comment je peux le definir ?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 janv. 2010 à 16:30
Une petite recherche google (CLOCKS_PER_SEC turbo c) donne la réponse.
Turbo C est vieux et utilisait CLK_TCK.

Donc utilise CLK_TCK à la place.
Mais vérifie que les résultats ne sont pas aberrants non plus !
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 16:55
quel est le role du nCorrection = clock() - nBeginning; qui apparait dans le debut de chaque boucle
pourquoi on ne prend en compte que la deuximem moitie du test
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 janv. 2010 à 17:00
Relis mon deuxième poste, page précédente.

nCorrection est une estimation du temps perdu dans le for.

Je ne prend la deuxième moitié du test, car comme pour une voiture, il y a "un temps de chauffe".
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 19:39
qu'est ce qu'il signifie le clock() que tu utilise et la moyenne?
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
11 janv. 2010 à 21:43
quel est l'objectif de faire OP-Count opération pourquoi on ne travaille pas seulement avec une seule operation et 20 test
0
amalnawal Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 10 mai 2010
12 janv. 2010 à 00:01
c'est quoi une surveillance du service du PC qui a une relation avec les performances du PC
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 janv. 2010 à 09:52
Une moyenne, c'est une moyenne ! La somme des quantité divisée par le nombre de quantité.

clock est une fonction du C standard.

Pourquoi ne pas travailler sur une seule opération ? Car on ne peut pas chronométrer une seule opération avec clock(). clock est en milliseconde (10^-3) alors qu'une opération prend normalement moins d'une nanoseconde (10^-9).

"Le service" du PC, au sens technique, ça ne veut rien dire... Peut être que cela veut dire le service rendu par le PC, et sa réactivité à fournir ce service. Mais c'est très abstrait et donc difficilement calculable.
0
Rejoignez-nous