100% UC

100% UC - Ada - Programmation

Marsh Posté le 07-04-2013 à 16:57:22    

Bonjour, j'ai googlé et cherché, mais Ada n'étant pas le langage le plus répandu... Le fait qu'il gère le multithreading nativement...
 
Bref voilà j'aimerais "simplement" créer un programme utilisant chaque thread du processeur au maximum, c'est une requête qui peut paraître stupide, mais c'est ce que je cherche à faire...
Mes multiples tentatives n'ont rien donné, tout ce que j'ai réussi à faire c'est occuper 25% du proc (1 coeur sur 4 pour mon quad) et gonfler la RAM à sa vitesse limite (de l'ordre du Giga-octet/seconde)
 
Mes échecs viennent sans doute du fait que j'ignore finalement ce qu'il se passe réellement au niveau du processeur (enfin disons l'archi x86 émulée de nos jours sur les Intels du moins...) aussi bien au niveau des registres que des threads eux-mêmes...
 
Merci d'avance

Reply

Marsh Posté le 07-04-2013 à 16:57:22   

Reply

Marsh Posté le 07-04-2013 à 18:18:55    

Bonjour
Et si tu lance quatre fois ton process en question il se passe quoi ?


Message édité par Profil supprimé le 07-04-2013 à 18:19:21
Reply

Marsh Posté le 07-04-2013 à 19:45:14    

J'atteins effectivement les 100% ! Le but de mon jeu stupide serait de trouver un moyen de le faire dans un seul exécutable (ce serait un peu comme me prouver qu'Ada le permet), j'ignore si un pragma en rapport avec le multithreading changerait quelque chose, je vais creuser ce soir, merci pour l'astuce en tout cas je n'y avais pas pensé, mais ce n'est pas exactement ce que je recherche

Reply

Marsh Posté le 07-04-2013 à 19:49:46    

Tu peux télécharger Quadtruck, je viens de l'écrire pour tester, je ne doit avoir qu'un deux corp, et encore pas certain, mais ça doit marcher.


Message édité par Profil supprimé le 07-04-2013 à 19:50:40
Reply

Marsh Posté le 08-04-2013 à 00:17:22    

(désolé de la réponse tardive)
Déjà un énorme merci d'aider le grand débutant que je suis, je manque de connaissances, exp en dev...
 
Je n'ai pas de gnat récent et du coup le compilo a tiqué sur sur un truc (généricité au niveau de la procedure), ce n'est pas de l'Ada 95 non ?
J'ai quand même pu faire le test en remettant tout en un seul source (exit le côté générique et pratique de ton task manager)
D'ailleurs, je ne sais pas s'il est minimal (juste pour l'exemple) mais merci de le partager !
 
J'ai peut-être fait n'importe quoi (ça ne m'étonnerait pas) mais rapidement j'ai collé tout ça en un fichier :
 
http://pastebin.com/aj5sHKyV
 
alors le put est commenté parce que sous windows ça fait un csrss.exe qui tourne à mort (il doit s'occuper du graphique je crois)
donc les put_line ça ralentie beaucoup dans une loop, à tel point que le programme n'utilise plus que moins d'1% d'UC
 
et ensuite tel quel le programme ne tourne pas assez pour monter l'UC, sous process explorer j'ai les infos :
 
j'ai donc bien 4 threads actifs (~60k changements de contexte attribués à chaque) mais la conso UC va de 2 à 5%, donc ça ne dépasse pas les 15-20% de moyenne au total, et j'ai bien sûr le 5ème thread qui est le programme en lui même (200 CS ?)
 
Par contre si je commente le Screen_Manager.Get(Process_Id); appelé à chaque boucle de la tâche, j'obtiens 3 threads 25% uc CHACUN
la raison apparemment c'est le wait pour la 4ème tache, si la valeur est mise à 0.0000025 comme les autres j'ai le tant attendu :
 
100% !!!
 
Merci infiniment :)
 
Mais du coup pour que ce sujet ait plus d'utilité pour les débutants comme moi qui vont lire, faudrait que je trouve mon erreur, j'ai honte de montrer mes sources c'est dégueulasse (des tableaux à indice indéfinis de tâches s'amusant à looper sur des declare de pointeurs sur des éléments trop gros ('size use 200), comprenez-moi bien : j'étais désespéré)
 
En fait je ne suis pas sûr mais peut-être que je mettais pas de calculs compliqué dans les tâches, les tâches faisaient la même opération (mais pas sur des variables similaires pourtant...) qui consistait à additionner ou multiplier, le compilateur a-t-il été intelligent au point de faire un exéc qui se mette à rassembler le boulot ?
 
L'informatique reste un mystère, surtout le compilateur et la forme réelle de mon exe qu'il concocte !
 
En tout cas merci bien de ton aide, efficace et rapide ;)

Reply

Marsh Posté le 08-04-2013 à 19:24:56    

De rien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed