progc
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| progc [2018/05/15 15:33] – brbachel | progc [2018/10/11 22:49] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ===== Eléments de programmation multithread ===== | ===== Eléments de programmation multithread ===== | ||
| - | 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 qui permettent de lancer des tâches sur des threads et les synchroniser: | + | 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 |
| + | |||
| + | Par programmation, | ||
| ===== Mesure des temps de calcul ===== | ===== Mesure des temps de calcul ===== | ||
| - | Pour mesurer les temps de calcul d'un programme, une bonne solution consiste à utiliser la commande Unix '' | + | Pour mesurer les temps de calcul d'un programme, une bonne solution consiste à utiliser la commande Unix '' |
| ==== La solution: getrusage ==== | ==== La solution: getrusage ==== | ||
| - | Une bonne solution pour mesurer un temps de calcul par programmation consiste donc à utiliser la fonction '' | + | Une bonne solution pour mesurer un temps de calcul par programmation consiste donc à utiliser la fonction '' |
| <code c++> | <code c++> | ||
| Ligne 33: | Ligne 35: | ||
| </ | </ | ||
| - | La fonction '' | + | La fonction '' |
| < | < | ||
| - | real 17550 ms | + | real 16080 ms |
| - | user 17550 ms | + | user 16088 ms |
| sys 0 ms | sys 0 ms | ||
| </ | </ | ||
| Ligne 44: | Ligne 46: | ||
| < | < | ||
| - | real | + | real |
| - | user | + | user |
| - | sys 0m0.015s | + | sys 0m0.004s |
| </ | </ | ||
| + | |||
| + | ==== Temps d' | ||
| + | |||
| + | La fonction '' | ||
| + | |||
| + | <code c++> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #include " | ||
| + | |||
| + | std::mutex mutex; | ||
| + | |||
| + | long fibonacci(unsigned n) { | ||
| + | if (n<2) return n; | ||
| + | | ||
| + | } | ||
| + | |||
| + | void measure(unsigned n) { | ||
| + | auto start = now(RUSAGE_THREAD); | ||
| + | | ||
| + | auto end = now(RUSAGE_THREAD); | ||
| + | |||
| + | auto duration = end-start; | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | int main(void) { | ||
| + | | ||
| + | |||
| + | auto start = now(); | ||
| + | for (unsigned i = 0; i<4; ++i) t[i] = std:: | ||
| + | for (unsigned i = 0; i<4; ++i) t[i].join(); | ||
| + | auto end = now(); | ||
| + | |||
| + | auto duration = end-start; | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Et voici les mesures que l'on peut obtenir, où l'on constate que le temps cumulé des threads correspond bien au temps mesuré pour le processus: | ||
| + | |||
| + | < | ||
| + | [thread #2] | ||
| + | real = 70480 ms | ||
| + | user = 17622 ms | ||
| + | sys = 0 ms | ||
| + | [thread #1] | ||
| + | real = 70500 ms | ||
| + | user = 17627 ms | ||
| + | sys = 0 ms | ||
| + | [thread #3] | ||
| + | real = 70520 ms | ||
| + | user = 17638 ms | ||
| + | sys = 0 ms | ||
| + | [thread #4] | ||
| + | real = 70520 ms | ||
| + | user = 17637 ms | ||
| + | sys = 2 ms | ||
| + | [overall] | ||
| + | real = 70520 ms | ||
| + | user = 70525 ms | ||
| + | sys = 4 ms | ||
| + | </ | ||
| + | |||
progc.1526391207.txt.gz · Dernière modification : 2018/10/11 22:49 (modification externe)