CACULER UNE FACTORIELLE AVEC PLUSIEURS COEUR DE CALCUL ET AFFICHER LES TEMPS D'E
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 2018
-
25 juil. 2013 à 18:08
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 2023
-
2 août 2013 à 15:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 2 août 2013 à 15:51
Note de l'expert : Une petite précision vos différents threads ne doivent pas appeler des objet local à la procédure qui créer les threads mais des variables globales à l'unité ou bien encapsulé-les dans chacun des threads.
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 2 août 2013 à 01:47
Le nombre de coeur multiplie la fréquence du processeur : Vrai
Un processeur équipé d'un double coeur permet d'effectuer des programmes dont la fréquence total double. En effet, si pour une action donné, vous pouvez répartir le nombre d'opération sur chacun des coeurs Alors vous obtiendrais une fréquence cumulé égale à la somme des fréquences cumulées des deux coeurs.
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 2 août 2013 à 01:46
En effet dès que l'on utilise une boucle for i=indice to une_fin ou peut alors segmenter son code de cette façon pour répartir des calculs élémentaires sur chaque unité de traitement qui vont aussi agir simultanément et ainsi gagner autant de cycles machine que le temps total d'exécution qui cette fois ci est divisible pour le nombre d'unité de coeur de calcul de ton µ-micro-processeur.
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 2 août 2013 à 01:38
Comme tu peut le voir les cours d'automatisme servent à quelque chose en effet jusqu'a présent je voyait des thread (des tache en français) lancée en l'air sans qu'il y ai de synchronisation - ce qui m'a moi aussi laisser septique pendant un moment mais j'ai finit par réaliser ce code et de multiple autre dans mon logiciel afin d'utiliser plusieurs coeur de calcul simultanément et en parallèle pour qu'ils agissent de concert!...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 30 juil. 2013 à 18:35
Zip modifié
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 26 juil. 2013 à 16:08
les fichiers *.dcu; *.dof; *.~pas; *.~dfm; *.cfg; et *.dsk
sont a supprimer du Zip
Merci
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 25 juil. 2013 à 20:26
Merci pour ces précisions!
ça me servira bientôt...
A+
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 25 juil. 2013 à 19:07
Tu peut noter l'initialisation de la variable ThreadsRunning qui est décrémenter à l'intérieur d'un mutex pour déclarer une zone d'exclusion mutuel - Deux processus simultanés ne pourrons pas accéder à cette variable mais l'un après l'autre de façon a obtenir une décrémentation unique à un moment donné. Tu peut voir que le thread d'attente se termine que ThreadsRunning est égale à zéro
pour rendre la main à ton programme avec la méthode WaitFor (la fin de son exécution). Si j'avais une machine équipé de rayon X je serait bien heureux de voir la circulation des flux mémmorielle de mon µmicroprocesseur
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 25 juil. 2013 à 18:49
La boucle de temporisation permet de comparaît avec un même calcul les différences entre un calcul mono-coeur et un calcul multi-coeur, Tu dois comprendre que ce n'est pas forcement automatique et ceci permet de comparer une exécution multi-threader ou simplement sur un coeur de calcul. En effet le temps de calcul et ce pourquoi j'ai écrit la boucle for j qui me permet de comparaît deux temps de calcul avec la fonction GetTickCount qui ainsi est différente de zéro car ces fonctions sont très rapide. Ce calcul est de surcroit très rapide et l'utilisation de plusieurs threads permet de le vérifier. Et ainsi d'attendre quand l'opération est effectuée sur plusieurs coeurs que les différents threads soient terminé et révolu. Comme tu peut le voir sur l'exemple que j'ai posté. Ainsi de grosse boucle de calcul peuvent être décomposé en partie plus réduite afin d'être exécuter de concert.
denisbertin
Messages postés245Date d'inscriptionlundi 22 avril 2013StatutMembreDernière intervention13 mai 20231 25 juil. 2013 à 18:22
La boucle de temporisation permet de faire en sorte que le compteur de temps obtenu avec gettickcount soit différent de zéro pour comparer les cycles entre un calcul mono-coeur et le même calcul multithreader (multi-tache). J'ai établi cette formulation qui permet vraiment d'utiliser plusieurs coeur de calcul en même temps puis de les synchroniser avec le thread d'attente qui vérifie que le nombre de ThreadsRunning soient différent de zéro pour poursuivre quand les différents threads sont terminé et révolu.
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 25 juil. 2013 à 18:08
Bj Denis,
J'ai parcouru le code rapidement et il va m'être utile car je n'ai pas fini de faire le tour de ces fichus threads!
De plus je ne connaissais pas l'utilisation des différents coeurs de l'ordi, je croyais que c'était windows qui gérait automatiquement!
J'ai pas trop approfondi, mais je ne vois pas l'utilité de ta boucle de temporisation!
for i:=1 to jusqua do
begin
n:=n*i;
//Boucle de temporisation
for j:=1 to 20000 do s:=sin(j);
end;
2 août 2013 à 15:51
2 août 2013 à 01:47
Un processeur équipé d'un double coeur permet d'effectuer des programmes dont la fréquence total double. En effet, si pour une action donné, vous pouvez répartir le nombre d'opération sur chacun des coeurs Alors vous obtiendrais une fréquence cumulé égale à la somme des fréquences cumulées des deux coeurs.
2 août 2013 à 01:46
2 août 2013 à 01:38
30 juil. 2013 à 18:35
26 juil. 2013 à 16:08
sont a supprimer du Zip
Merci
25 juil. 2013 à 20:26
ça me servira bientôt...
A+
25 juil. 2013 à 19:07
pour rendre la main à ton programme avec la méthode WaitFor (la fin de son exécution). Si j'avais une machine équipé de rayon X je serait bien heureux de voir la circulation des flux mémmorielle de mon µmicroprocesseur
25 juil. 2013 à 18:49
25 juil. 2013 à 18:22
25 juil. 2013 à 18:08
J'ai parcouru le code rapidement et il va m'être utile car je n'ai pas fini de faire le tour de ces fichus threads!
De plus je ne connaissais pas l'utilisation des différents coeurs de l'ordi, je croyais que c'était windows qui gérait automatiquement!
J'ai pas trop approfondi, mais je ne vois pas l'utilité de ta boucle de temporisation!
for i:=1 to jusqua do
begin
n:=n*i;
//Boucle de temporisation
for j:=1 to 20000 do s:=sin(j);
end;
A+