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

Algorithmes et structures de données Discussion :

Optimisation vitesse d'un programme


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Optimisation vitesse d'un programme
    Bonjour, j'ai créé un programme C qui doit répéter certaines actions plusieurs milliers de fois, en gros il copie la première ligne d'un fichier dans un tableau et doit compter le nombres de fois où elle apparait dans les lignes d'un autre fichier puis prend ensuite la 2eme ligne du premier fichier et fait pareil..
    Ainsi de suite, pendant plusieurs millions de fois...

    Ces fichier font pour certains plusieurs Go et j'aimerais savoir comment focaliser toute la puissance de mon ordinateur sur l’exécution de ce seul programme.

    Ensuite j'ai aussi pensé utiliser les différents coeurs de mon core i7 ainsi que pourquoi pas la puissance de calcul de mon GPU avec CUDA pour accélérer le processus.

    Pourriez-vous m'indiquer comment focaliser toute la puissance de mon processeur sur ce programme et éventuellement me donner des pistes pour partager les operations entre les divers coeurs de mon processeur et le GPU de ma carte graphique ?

    Merci Beaucoup, Matthieu.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Ta question n'a que peu a voir avec le langage de programmation.

    En gros, tu as actuellement un algorithme naif, et tu cherches a l'ameliorer, voir a le paralleliser, eventuellement en utilisant un GPU.

    1er probleme : ton traitement ne correspond pas aux calculs sur GPU. Du moins pas tel qu'il est decrit actuellement.

    Ensuite, je pense que tu devrais revoir ton algorithme : si tu as N lignes, tu parcours chacun de tes fichiers N fois, ce qui n'est pas du tout optimal.
    Une idee, par exemple, serait de calculer un hash de chaque ligne de ton fichier, puis de comparer ces hashs. Mais je suis certain qu'il existe de nombreuses autres idees, qui seront beaucoup mieux.

    Une fois que tu auras un nouvel algorithme, alors seulement tu pourras songer a le paralleliser, sur CPU ou GPU s'il s'y prete.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre actif Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Points : 204
    Points
    204
    Par défaut
    Citation Envoyé par 28matt04 Voir le message
    Pourriez-vous m'indiquer comment focaliser toute la puissance de mon processeur sur ce programme
    Tu peux modifier la priorité de ton programme pour qu'il soit traité avant tout le reste.

    Pour l'aspect algorithmique, c'est une question que beaucoup de monde s'est posé .
    « La science informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes. » — Edsger Dijkstra

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    J'ai bien quelques idées d'optimisation, mais je me demandais :

    1) Quel est le but de ton programme ? J'entends par là est-ce que le choix de chercher ligne à ligne peut être amélioré ?

    2) Comment tu recherches effectivement la présence de la ligne dans ton texte ? C'est une fonction maison ? Une fonction simple de C ? Un algorithme existant ?



  5. #5
    Membre habitué
    Homme Profil pro
    Retraité MO
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité MO
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 136
    Points
    136
    Par défaut
    Salut.
    Ca manque un peu de précisions.

    - On trouve des utilitaires de tri efficaces, ou bien d'indexation. Ensuite, descendre les deux fichiers en parallèle avec ruptures de séquences (changement de fichier au premier changement de valeur)
    - Le fichier "premier" est-il de taille réduite ? Dans ce cas, vaudrait mieux en faire une table et descendre le plus gros une seule fois, en enrichissant la table à chaque valeur rencontrée.
    - Fichiers "gros" : du fait du nombre de lignes, ou de la taille de chaque ligne ? Est-il possible d'en extraire des parties utiles, plus faciles/légères à traiter ensuite ?

    Il est certain que la méthode " n fois" x "n fois" n'a jamais été la plus rapide.

    .db.
    R.BASILE, 1971 : "Il y a mille et un procédés pour accélérer des particules. Le seul véritablement fondamental restant...le carnet de chèques."

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Tu fais des i/o donc la vitesse de ton programme dépend des accès disques et non de ton processeur, qui va passer son temps à attendre le disque.

    Pour accélérer ton programme c'est plus une optimisation des i/o qu'il te faut faire.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    On peut aussi utiliser Lucene qui est extrêmement performant pour l'indexation et la recherche textuelle.

    Egalement CouchDB + Lucene permettent de répartir les traitements sur plusieurs machines (sharding)...

    ... mais on sait trop peu de choses sur le contexte d'exécution de ce programme pour vraiment préconiser une solution... (enfin, à mon avis)

Discussions similaires

  1. optimiser vitesse application
    Par petitours dans le forum Access
    Réponses: 3
    Dernier message: 03/04/2008, 15h25
  2. Réponses: 5
    Dernier message: 20/11/2007, 08h48
  3. Optimisation vitesse pure
    Par Kujara dans le forum C++
    Réponses: 44
    Dernier message: 15/10/2007, 14h47
  4. Réponses: 4
    Dernier message: 23/04/2007, 22h46
  5. optimisation vitesse
    Par WaM dans le forum C
    Réponses: 7
    Dernier message: 09/01/2006, 23h43

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