Outils pour utilisateurs

Outils du site


progc

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édentes Révision précédente
Prochaine révision
Révision précédente
progc [2018/05/15 14:17]
brbachel
progc [2018/10/11 20:49] (Version actuelle)
Ligne 5: Ligne 5:
 Depuis le C++11, manipuler des threads en C++ est devenu plus simple et totalement portable. Voici un diaporama qui présente brièvement des fonctionnalités standards du C++ actuel qui permettent de lancer des tâches sur des threads et les synchroniser:​ {{ :​wiki:​multithread_cpp.pdf |}}. Deux couches d'​abstraction sont disponibles:​ la première est simplement une surcouche objet des threads POSIX, le développeur manipule donc explicitement des threads; alors que la seconde est plus abstraite (et donc moins flexible) pour masquer les mécanismes multithread et simplifier le code. Le code des exemples de la présentation sont également disponibles:​ {{ :​wiki:​multithread_cpp.tgz |}}. Depuis le C++11, manipuler des threads en C++ est devenu plus simple et totalement portable. Voici un diaporama qui présente brièvement des fonctionnalités standards du C++ actuel qui permettent de lancer des tâches sur des threads et les synchroniser:​ {{ :​wiki:​multithread_cpp.pdf |}}. Deux couches d'​abstraction sont disponibles:​ la première est simplement une surcouche objet des threads POSIX, le développeur manipule donc explicitement des threads; alors que la seconde est plus abstraite (et donc moins flexible) pour masquer les mécanismes multithread et simplifier le code. Le code des exemples de la présentation sont également disponibles:​ {{ :​wiki:​multithread_cpp.tgz |}}.
  
-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. ​
  
 ===== Mesure des temps de calcul ===== ===== Mesure des temps de calcul =====
progc.txt · Dernière modification: 2018/10/11 20:49 (modification externe)