Outils pour utilisateurs

Outils du site


mesure

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
mesure [2018/05/15 14:20] brbachelmesure [2021/06/30 11:48] (Version actuelle) hetoussa
Ligne 34: Ligne 34:
  
 Par programmation, il existe plusieurs manières d'estimer le nombre de coeurs disponibles pour le processus courant, ce qui permet de déterminer combien de threads il faut créer pour les besoins d'un programme. En voici trois en C / C++: ''std::hardware_concurrency'' (à partir de C++11), ''omp_max_threads'' (OpenMP), ''sched_getaffinity'' (module standard Linux). Le code suivant teste les trois solutions: [[http://fc.isima.fr/~toussain/docWiki/cores_estimator.cpp|cores_estimator.cpp]]. Il semblerait que les approches avec OpenMP et Sched fournissent les bonnes informations, alors que celle du C++ indique le nombre de coeurs de la machine et non celui de votre réservation SLURM.  Par programmation, il existe plusieurs manières d'estimer le nombre de coeurs disponibles pour le processus courant, ce qui permet de déterminer combien de threads il faut créer pour les besoins d'un programme. En voici trois en C / C++: ''std::hardware_concurrency'' (à partir de C++11), ''omp_max_threads'' (OpenMP), ''sched_getaffinity'' (module standard Linux). Le code suivant teste les trois solutions: [[http://fc.isima.fr/~toussain/docWiki/cores_estimator.cpp|cores_estimator.cpp]]. Il semblerait que les approches avec OpenMP et Sched fournissent les bonnes informations, alors que celle du C++ indique le nombre de coeurs de la machine et non celui de votre réservation SLURM. 
 +Pour plus de détails, voir la page [[progc|Programmation en C / C++]].
  
 ==== Temps de calcul et localisation des cœurs ==== ==== Temps de calcul et localisation des cœurs ====
Ligne 55: Ligne 56:
   * ''mpstat -P ALL <//sec//>'' permet d'afficher l'activité de chaque cœur (logique) toutes les //sec// secondes.   * ''mpstat -P ALL <//sec//>'' permet d'afficher l'activité de chaque cœur (logique) toutes les //sec// secondes.
  
-  * ''/usr/local/bin/time -v '' suivi du nom du programme donne des informations sur le temps de calcul et les ressources mémoire utilisées (il est nécessaire de préciser le chemin complet de la commande ''time'' si on utilise l'option ''-v'')+  * ''/usr/bin/time -v '' suivi du nom du programme donne des informations sur le temps de calcul et les ressources mémoire utilisées (il est nécessaire de préciser le chemin complet de la commande ''time'' si on utilise l'option ''-v'')
  
   * ''lspci | grep VGA '' affiche les cartes graphiques disponibles   * ''lspci | grep VGA '' affiche les cartes graphiques disponibles
Ligne 61: Ligne 62:
   * ''taskset -cp $$'' indique l'affinité CPU du processus courant (''$$''), autrement dit les numéros des coeurs alloués à votre processus (SLURM ou autre).   * ''taskset -cp $$'' indique l'affinité CPU du processus courant (''$$''), autrement dit les numéros des coeurs alloués à votre processus (SLURM ou autre).
  
 +==== Fonction getrusage (C/ C++ sous Linux) ====
 + Le fonction [[https://man7.org/linux/man-pages/man2/getrusage.2.html|getrusage]], disponible en C / C++ sur les OS linux, permet de récupérer des informations sur la consommation de ressources du programme depuis lequel est elle appelée.
  
 +Les exemples de fonctions ci-dessous permettent de récupérer le temps de calcul et la consommation de RAM.
 +
 +<code C>
 + #include <sys/resource.h>
 + #include <sys/time.h>
 +  
 +  
 +double give_time() 
 +{
 +    struct rusage ru;
 +    struct timeval tim;
 +    getrusage(RUSAGE_SELF, &ru);
 +    tim = ru.ru_utime;
 +    
 +    //temps systeme en secondes
 +    double stime = (double)tim.tv_sec + (double)tim.tv_usec / 1000000.0;
 +    
 +    return stime;
 +}
 +
 +double give_maxMemoryUsed()
 +{
 +    struct rusage ru;
 +    getrusage(RUSAGE_SELF, &ru);
 +    return ru.ru_maxrss; //(en kbytes ~ Max Resident size de la commande time -v)
 +}
 +
 +
 +
 +</code>
  
  
  
mesure.1526394001.txt.gz · Dernière modification : 2018/10/11 20:49 (modification externe)