Partage
  • Partager sur Facebook
  • Partager sur Twitter

Répartition travail CPU -> GPU pour l'optimisation

    25 avril 2019 à 19:09:49

    Salut tout le monde,

    Travaillant sur un algorithme assez lourd et gourmand en performances, je cherche à savoir si il existe des moyens de répartir une partie de la charge de travail du CPU sur le GPU. Je sais que c'est une pratique assez courante en infographie mais est-ce vraiment utile une fois transposé à d'autres domaines ? Et si oui comment la mettre en place ? J'ai regardé du coté des attributs et built-ins GCC mais n'ai rien trouvé.

    Merci d'avance pour vos réponses et si vous avez des propositions autres qu'une répartition du travail, ça m'intéresse aussi.

    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2019 à 23:58:49

      Il y a des librairies comme CUDA qui permettent ce genre de choses.

      Sinon, avant même de penser à ça, quel genre d'algo est-ce ?

      - Ne peux tu pas optimiser l'algo lui même ? (parfois, on croit qu'un algo est lent, et quand on profile un peu, on voit qu'en fait, il perd 90% de son temps dans des conneries évitables).

      - Utilises tu tous les coeurs de ton CPU ? Programmation parallèle efficace ?

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de codes en C et C++ http://fvirtman.free.fr/recueil/index.html

        26 avril 2019 à 11:20:54

        Question bête aussi, mais quels sont tes flags de compilation ?

        Si tu compiles en -O3 tu verras un gain conséquent en performances.

        Sinon, effectivement je pense que utiliser plusieurs coeurs sera plus facile que d'offloader sur le GPU (en terme de difficulté de programmation).

        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2019 à 11:25:09

          potterman28wxcv a écrit:

          Question bête aussi, mais quels sont tes flags de compilation ?

          Ah oui, et vérifie que tu compiles bien en release si tu es sous un IDE, pas en debug si tu cherches les perfs.
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de codes en C et C++ http://fvirtman.free.fr/recueil/index.html

            26 avril 2019 à 23:18:38

            L'algorithme est celui de suurballe, j'ai déjà fait un gros effort sur l'optimisation donc les flags ne changent en rien les performances (j'observe même un léger ralentissement avec O3 ou Ofast). En fait j'aurai surtout besoin de gagner du temps sur les très gros graphes (+15 000 vertices). Comment fait-on pour utiliser plusieurs coeurs ?

            -
            Edité par ThomasFlt 26 avril 2019 à 23:20:36

            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2019 à 1:41:55

              ThomasFlt a écrit:

              L'algorithme est celui de suurballe, j'ai déjà fait un gros effort sur l'optimisation donc les flags ne changent en rien les performances (j'observe même un léger ralentissement avec O3 ou Ofast). En fait j'aurai surtout besoin de gagner du temps sur les très gros graphes (+15 000 vertices). Comment fait-on pour utiliser plusieurs coeurs ?

              -
              Edité par ThomasFlt il y a environ 1 heure


              C'est bien la première fois que j'entends que -O3 cause du ralentissement, même léger. T'es vraiment sûr ?

              Pour utiliser plusieurs coeurs il faut que tu fasses de la programmation parallèle. C'est tout un sujet, il y a des livres entiers dédiés à ça.

              Deux méthodes sont au choix, soit utiliser les pthread ou équivalent windows, soit utiliser OpenMP

              https://computing.llnl.gov/tutorials/pthreads/

              https://computing.llnl.gov/tutorials/openMP/

              • Partager sur Facebook
              • Partager sur Twitter

              Répartition travail CPU -> GPU pour l'optimisation

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown