Je n'ai pas connaissance de ce qu'est réellement un "processeur monocore hyperthreadé", mais ca ressemble a des coeur logique non ? (1 processeur monocore qui simule plusieurs coeur).
Oui, un processeur avec un seul coeur mais qui supporte l'hypertheading a plusieurs (deux en fait) coeurs logiques. C'est apparu du temps du Pentium 4. Le coeur unique duplique réellement les ressources qui conservent l'état, mais pas les pipelines (qui font le traitement).
C'est sur les deux courbes et à des endroits différents à chaque exécution donc ça doit venir de mon PC. J'ai regardé le code, ça me paraît clair, peut être que j'aurai une question auquel cas je viendrais la poster ici.
Je devais faire une exécution avec du séquentiel puis du parallèle et enfin avec des sémaphores donc je vais m'intéresser aux sémaphores et regarder comment coder ça
Merci encore à vous de m'avoir aider
Sémaphore ? Si tu utilises les fonctions telle que dans le code actuelle, il n'y a aucune raison d'utiliser des sémaphores. Et même en découpant le tableau, si on le fait bien, aucune raison non plus. L'énoncé de ton TP est disponible ? Ca pique ma curiosité.
Marc Mongenet a écrit:
SofEvans2 a écrit:
Je n'ai pas connaissance de ce qu'est réellement un "processeur monocore hyperthreadé", mais ca ressemble a des coeur logique non ? (1 processeur monocore qui simule plusieurs coeur).
Oui, un processeur avec un seul coeur mais qui supporte l'hypertheading a plusieurs (deux en fait) coeurs logiques. C'est apparu du temps du Pentium 4. Le coeur unique duplique réellement les ressources qui conservent l'état, mais pas les pipelines (qui font le traitement).
Du coup ... si les pipelines ne sont pas dupliqué, la vitesse de traitement est réellement amélioré ? J'ai jamais pu benchmarké ce type de "détail", ca a toujours été des "on dit" (on dit que seul le cœur physique améliore vraiment les perf, pas les cœurs logique).
Du coup ... si les pipelines ne sont pas dupliqué, la vitesse de traitement est réellement amélioré ?
En général un peu, d'après Intel. Il faut savoir qu'un seul thread n'arrive pratiquement jamais à occuper chaque étape de chaque pipeline, donc ça laisse de la place. Voir l'image en haut de https://en.wikipedia.org/wiki/Hyper-threading.
Remarque que si l'on dupliquait aussi les pipelines, ça ferait un nouveau coeur complet.
- Edité par Marc Mongenet 25 novembre 2017 à 14:07:05
Ah oui ! Je n'y avais pas pensé. Donc ca colle avec ce que je sais : les cœurs logiques sont moins bon que les cœurs physiques pour du "vrai" multithreading.
C'est sur les deux courbes et à des endroits différents à chaque exécution donc ça doit venir de mon PC. J'ai regardé le code, ça me paraît clair, peut être que j'aurai une question auquel cas je viendrais la poster ici.
Je devais faire une exécution avec du séquentiel puis du parallèle et enfin avec des sémaphores donc je vais m'intéresser aux sémaphores et regarder comment coder ça
Merci encore à vous de m'avoir aider
Sémaphore ? Si tu utilises les fonctions telle que dans le code actuelle, il n'y a aucune raison d'utiliser des sémaphores. Et même en découpant le tableau, si on le fait bien, aucune raison non plus. L'énoncé de ton TP est disponible ? Ca pique ma curiosité.
Marc Mongenet a écrit:
SofEvans2 a écrit:
Je n'ai pas connaissance de ce qu'est réellement un "processeur monocore hyperthreadé", mais ca ressemble a des coeur logique non ? (1 processeur monocore qui simule plusieurs coeur).
Oui, un processeur avec un seul coeur mais qui supporte l'hypertheading a plusieurs (deux en fait) coeurs logiques. C'est apparu du temps du Pentium 4. Le coeur unique duplique réellement les ressources qui conservent l'état, mais pas les pipelines (qui font le traitement).
Du coup ... si les pipelines ne sont pas dupliqué, la vitesse de traitement est réellement amélioré ? J'ai jamais pu benchmarké ce type de "détail", ca a toujours été des "on dit" (on dit que seul le cœur physique améliore vraiment les perf, pas les cœurs logique).
Oui, dès que j'ai la possibilité de le prendre en photo et de le poster je le ferais
Du coup ... si les pipelines ne sont pas dupliqué, la vitesse de traitement est réellement amélioré ?
En général un peu, d'après Intel. Il faut savoir qu'un seul thread n'arrive pratiquement jamais à occuper chaque étape de chaque pipeline, donc ça laisse de la place. Voir l'image en haut de https://en.wikipedia.org/wiki/Hyper-threading.
SofEvans2 a écrit:
Donc ca colle avec ce que je sais : les cœurs logiques sont moins bon que les cœurs physiques pour du "vrai" multithreading.
Pour des tâches qui ont un taux d'IOs recouvrable de manière efficace avec du calcul, on peut vraiment s'approcher du gain théorique, mais il faut NUMA pour faire ça correctement.
J'ai fait quelques tests sur 2 pc différents l'un avec un core intel i3 3220 (2 cores avec HyperThreading soit 4 cores logiques )et l'autre avec un core i5 2500 (4 vrais cores sans HT) sous Ubuntu avec le logiciel POVRay et la scene 'benchmark.pov' (benchmark.ini pour les options), voici les résultats (vous noterez que POVRay met le processeur 'à genoux' puisque dans le moniteur système, le taux d'occupation monte à 100 %, en gros c'est du calcul de nombre à virgule intense (je ne lance rien en fond à ce moment là):
Core i5 2500 ; Ubuntu 16 ; 2 threads forcés : 6 min 38 sec.
(vous noterez que POVRay met le processeur 'à genoux' puisque dans le moniteur système, le taux d'occupation monte à 100 %, en gros c'est du calcul de nombre à virgule intense (je ne lance rien en fond à ce moment là)
Sauf que non, ça ne met pas ton processeur à genoux, parce que comme tu le dis toi même tu utilises massivement les unités flottantes, donc ça veut dire que potentiellement tes unités entières ne font rien, tes unités d'opérations sur les bits ne font rien, tes unités vectorielles ne font pas forcément quelque chose. Donc le parallélisme mono-core n'est probablement pas très utilisé. Tu peux déjà avoir plus d'informations en utilisant un profiler qui va pouvoir regarder notamment l'utilisation des unités de calculs en fonction de options que tu lui donnes.
Et ça, c'est sans parler du fait que l'on analyse pas non plus l'utilisation de la bande passante vers la mémoire qui est bien souvent bien plus cruciale pour les bonnes performances d'un algo.
En (très) gros, parce que je ne me souviens pas des détails précis (ça fait trop longtemps que j'ai bossé dessus), il t'indique le pourcentage de temps processeur occupé par le processus. Il ne prend pas en compte les unités. de calcul. Si tu veux t'en convaincre, écris une bête boucle infinie qui ne fait rien : elle montera bien à 100% d'utilisation du CPU et pourtant elle calcule quedal.
Ah oui, je vois. Le temps processeur est en lien avec l'option 'priorité' (très basse / basse / normale / haute / très haute) dans les options des moniteurs et ce qu'on appelle le 'task switching' le système d'exploitation donne du temps processeur pour les applications qui tournent en fond. Ah oui, ça me rappelle des souvenirs.
PS: dans mon message avec les tests chronométrés de POVRay je voulais mettre en lumière la différence entre des coeurs Logiques (avec doublement des registres) et des vraies unités de calculs (mais je constate qu'il y a bien d'autres facteurs).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr