IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Mega Ordinateur - Optimisation multi-ordinateur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Mega Ordinateur - Optimisation multi-ordinateur
    Bonjour à tous,

    Là où je travail, nous avons environ 30 ordinateurs qui dorment. Je m'explique, ces ordinateurs servent environ 5% du temps. Leurs capacités sont faiblement utilisées. Toutes ces machines sont branchées sur le réseau et exécutent des tâches de façon sporadiques selon les opérateurs dans l'usine.

    D'un autre côté, dans les bureaux, j'ai 3 machines qui roulent beaucoup plus. Quelques fois, elles ont des tâches d'optimisation à accomplir. Pour l'instant, je limite en temps/nbr d'itérations/% d'optimisation ces tâches afin que l'optimiseur ne tourne pas éternellement.

    La limite que j'impose à mon optimiseur me fais passer à côté de certaines solutions qui seraient plus optimales.

    Mon idée serait la suivante. J'aimerais utiliser chacun des dormeurs pour exécuter quelques calculs lorsqu'ils ne sont pas occupés.




    La façon de faire :

    J'aurais un ordinateur "répartiteur" qui receverait les requêtes d'optimisation et ensuite les répartiraient dans sa liste de dormeur. Lorsque le dormeur aurait fini ces calculs, il retourne le résultat au répartiteur. Lorsque la requête d'optimisation est complétée, le résultat est retourné au demandeur.

    Côté dormeur, il exécute ces fonctions "normales" et lorsqu'il à fini, il indique au répartiteur qu'il est en dormance. Lorsqu'un opérateur à besoin du dormeur, son statut change et le serveur ne peut plus lui envoyer de nouvelles requêtes tant qu'il ne dort pas.

    Côté bureau, la machine envoie au répartiteur ses données à optimiser et ensuite devient un dormeur, mais uniquement pour sa propre requête et ce jusqu'à ce que l'optimisation soit complète.




    Mes données :

    Il s'agit de positionner et d'orienter des morceaux 2 dimensions (de type feuille de métal) de forme diverses dans une surface plus grande pour la découpe. La quantité de morceau varie (entre 1 et ±100), la forme et dimension totalement aléatoire (enfin, sur demande des clients -> imprévisibles et aucun morceau identique).




    Mes questions :

    Je me demande si les efforts que je vais mettre à monter ce système vont être récompensées.

    1 : La vitesse de transfert sur le réseau, le traitement par le répartiteur, l'optimisation par les dormeurs (qui sont moins performant que mes ordinateur de bureaux, intel 2.0 GHz, 2 G RAM VS Intel Dual Core 3.06GHz, 4 G RAM, Windows XP dans tous les cas)

    -> Mon optimiseur n'étant pas multithreadé, je n'utilise pas le dual core.

    Peut-être avant de me casser la tête sur un système d'une telle ampleur, je suis mieux de rendre multi-thread mon optimiseur?


    De plus, je ne suis pas vraiment un programmeur hors-pair, je suis plutôt du type débutant. Alors, peut-être vais-je plus nuire à la production/ralentir mes optimisations que d'autre chose.

    J'aurais besoin de connaître vos avis sur les dangers d'un système à plusieurs ordinateurs, les dangers côté programmation, etc.

    Merci à tous,

    Antoine

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    De toute façon, il faudra rendre ton optimiseur multithread quelque soit la solution que tu choisis.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de lire et de répondre!


    C'est pas bête! Je m'y applique immédiatement, si le multi-threading me donne des améliorations suffisantes, je pourrais penser à laisser le tout tel quel.

    Cependant, mon optimiseur fait quelques simplifications afin de limiter les possibilitées. Je pourrais prendre en compte plus d'informations si je pousse le projet de système multi-ordinateur d'avant.


    Quelqu'un a un terme plus technique/commun pour remplacer "système multi-ordinateur"?


    Merci,

    antoine

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    On parle de clustering quand on fait marcher plusieurs machines sur la même application.

    Mais cela relève des mêmes problématique que le multithreading, avec des couts de synchro plus élevée, mais une puissance de calcul plus grande.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    En tout cas, l'idée est bien réfléchie. Cependant, comme tu l'as dit cela requiert un peu de connaissance avec de se lancer là dedans.
    -> C'est quoi un traitement 'long' ? Plusieurs secondes, plusieurs minutes, plusieurs heures ?
    -> Est-ce que tu sais ce qui dans le code prend du temps ? Calcul, accès E/S, etc. ? A mon avis la première chose serait d'instrumenter ton logiciel pour voir ce qui prend du temps.
    -> Peux-tu optimiser ton soft ? Peux-tu déjà répartir des calculs gourmands (multithread, openMP, CUDA, etc.) sur la même machine ? Peut être que le gain sera déjà suffisant.
    -> Jusqu'où peux-tu gonfler tes machines de calcul (RAM, disque, plus de coeur/process) ?

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Bonjour,


    -> C'est quoi un traitement 'long' ? Plusieurs secondes, plusieurs minutes, plusieurs heures ?

    -J'ai ajusté mes critères d'optimisation de sorte qu'en moyenne le temps est de 20 à 30 sec pour environ 30 morceaux.

    -- Ce temps semble peu, mais il faut prendre en considération que cette opération est exécutée environ 100 fois par jour et que quelques fois il peut y avoir + de 100 mcx ce qui peut entraîner un temps considérablement long (4 ou 5 min). Il ne s'agit pas de la seule étape que la personne accompli pour traiter les morceaux : vérification de stock, impressions d'étiquettes, impressions de documents divers, etc.

    -- De plus, il y a certaines simplifications que j'ai fait afin de réduire un peu le temps d'optimisation, au détriment de l'efficacité de l'optimiseur. Il s'agit de ne pas essayer toutes les orientations possibles, seulement certaines qui sont plus "intéressantes". C'est logique, mais dans certain cas, plus rares, le rendu est effroyable (peut-être pourrais-je ajouter une option "essayer toutes les orientations" de façon manuelle pour l'utilisateur lorsque ce dernier s'apperçoit du résultat désastreux).

    -> Est-ce que tu sais ce qui dans le code prend du temps ? Calcul, accès E/S, etc. ? A mon avis la première chose serait d'instrumenter ton logiciel pour voir ce qui prend du temps.

    -Ouais, j'y avais pas pensé. Rapidement, existe-t-il des outils qui pourrait m'aider? Ou plutôt faut-il que j'enregistre à des points précis l'heure (avec les milisecondes) à l'aquelle le programme passe par là et j'enregistre le tout dans un vecteur que je fini par enregistrer dans un fichier excel que j'utilise pour faire des courbes?

    -Je n'ai pas d'E/S (du moins pas lors de la portion optimisation). Il s'agit principalement de vérifier quelles pièces entrent dans l'espace restante, ensuite, je classe ces pièces selon les plus intéressantes en premier, j'essaie pour une des premières (choisi aléatoirement parmis les 5% meilleures) une orientation qui semble la plus intéressante. Ensuite je "place" le morceau à cet endroit pour ensuite analyser l'espace restante de la même façon jusqu'à tous les morceaux soient placés. À ce moment, j'enregistre la solution trouvé dans un vecteur.

    -À chaque fois que je prend une décision, j'enregistre avant de prendre la décision, l'état de la situation. Lorsque tous les morceaux sont placés, je recommence à partir d'un état préalablement enregistré.

    -Lorsque j'atteint un critère d'arrêt (temps, % d'optimisation, nbr d'itération, etc.), j'analyse le vecteur des solutions trouvées afin d'en retirer le meilleur.

    -->En somme, il s'agit de vecteurs qui se construisent ou se détruisent.


    -> Peux-tu optimiser ton soft ? Peux-tu déjà répartir des calculs gourmands (multithread, openMP, CUDA, etc.) sur la même machine ? Peut être que le gain sera déjà suffisant.

    -J'avais mis de côté le multi-thread pour l'instant (je ne l'ai utilisé que quelque fois au paravent). Mais, je crois que ça été une erreur. Je crois que je vais ajouter un thread pour chaque décision importante.

    -Il doit bien rester de l'optimisation à faire pour ce qui est du code (il y en a toujours...). Mais, disons que chaque étape est dans le bon ordre et n'est pas superflue. Je ne connais pas openMP, ni CUDA, mais je vais googler ça à l'instant.


    -> Jusqu'où peux-tu gonfler tes machines de calcul (RAM, disque, plus de coeur/process) ?


    -Pour ce qui est de la machine par elle-même, il ne suffit que de convaincre mon patron qu'un investissement d'environ 1000$CAN par machine permettrait d'avoir une meilleure optimisation et de sauver des pertes de matériel. Même que 1000$CAN me semble beaucoup (c'est le prix d'un nouveau PC).

    -Cette option me semble très efficace, mais elle gâche le plaisir d'optimiser son code. Je crois quand même que je vais faire des tests sur ma machine (quad core 3.06Ghz, 4G RAM, WinXp) perso. lorsque le multi-thread va être implanté afin de pouvoir prouver que l'investissement en vaut le coût.


    Merci de ton intervention, cela m'a fait beaucoup réfléchir.

    En d'autres termes, l'option de construire un système qui utilise les machines dormeuses est intéressantes, mais il semblerait que je n'en suis pas encore rendu à ce point. La seule raison qui pourrait me rester pour le faire, c'est par plaisir et volonté d'apprendre.


    Comme toujours, j'ai eu réponse à mes interrogations!


    Merci à tous!!


    antoine

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. optimisation multi objectifs avec les algorithmes génétiques
    Par nadouu dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 21/06/2013, 20h15
  2. Optimisation multiobjectif avec OPTIMTOOL
    Par R.Soumia dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/10/2012, 19h46
  3. [lsqnonlin] optimisation multi-paramètres
    Par spoooks dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/08/2012, 15h53
  4. Réponses: 0
    Dernier message: 30/07/2012, 13h29
  5. Optimisation multi objectif
    Par dvp_zero dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 20/03/2011, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo