CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[cuda] Multi-gpu

vive_cod4
vive_cod4
Niveau 9
13 janvier 2014 à 21:48:33

Bonjour,

Je rencontre actuellement un problème lorsque je fais du multi-gpu : J'ai n GPU, dont 1 qui possède le buffer OpenGL. Ce que je fais, c'est que les n-1 autres GPUs vont appliquer le traitement sur l'image buffer d'OpenGL. A chaque fois que j'appelle ma fonction "finale" de rendue, chaque GPU copie la zone qui lui est dédiée (n-1 ème de l'image) puis effectue le calcul puis refait une copie vers le buffer. Le problème c'est que cette solution est plus lente que la mono-gpu, même avec du P2P. Le lancement des opérations sur les différents gpus sont faits avec omp.

Est-ce normal d'avoir des performances si horrible ? Si oui où est mon problème ? Des idées ?

Merci !

godrik
godrik
Niveau 30
13 janvier 2014 à 22:45:07

vive cod, il faut voir les details. En general, on ne met pas plus de 3 gpu dans une seule machine. Aussi quand on commence a avoir plus de 1 GPU, il y a une pression assez forte sur le bus PCI-express. Faire la copie vers le buffer final pourrait bien completement dominer ton temps de calcul.

vive_cod4
vive_cod4
Niveau 9
13 janvier 2014 à 22:55:46

Godrik -> Dans le cadre actuel, il y en a 6. En effet, j'avais bien peur que la transition mémoire puisse être le facteur de ralentissement principal, mais tu le penses aussi donc je pense que le problème vient de là.

Mais sinon, imaginons que l'on ait 3 GPUs. Faut-il plutôt faire 1 master qui fait rien et 2 autres qui calculent ? Où les 3 qui calculent dont 1 qui transfert aussi de la mémoire pendant ses calculs ?

godrik
godrik
Niveau 30
13 janvier 2014 à 23:34:22

6 GPU dans une seule machine? C'est souvent relativement stupide. multi gpu c'est en gros la meme chose que distributed memory. Il faut minimiser les communications parceque sinon tu vas tuer le bus PCI-express. Tu transfers combien de donnee? le tout prend combien de temps? Rappelle toi que PCI-e 3.0 avec 16 voies, ca ne transporte que 15GB/s. Donc si tu transporte des images en 1080p, tu ne peux en deplacer que 1.8 par secondes (en supposant 32bit color channel et pas de compression).

godrik
godrik
Niveau 30
13 janvier 2014 à 23:36:47

argl, je sais pas compter, j'ai oublie un facteur 1000 :)
C'est 1808 images 1080px32 par seconde.

vive_cod4
vive_cod4
Niveau 9
14 janvier 2014 à 18:54:10

J'ai déjà constaté une chose, c'est que le fait de lancer des threads omps à chaque frame c'est pas super. Même si le contenu du parallel for est vide, j'ai déjà une énorme perte. Sinon c'est une image full hd.

Donc en gros si j'ai bien compris, le multi-gpu c'est pas super si c'est pour chaque frame, découper l'image, calculer la recomposer puis l'afficher. Il faudrait des blocs complétement indépendants, ce qui n'est pas mon cas pour des images venant de camera.

Merci de ta réponse, si tu as des idées je suis preneur

godrik
godrik
Niveau 30
15 janvier 2014 à 00:17:31

vive_cod4, concretement il faudrait que je vois toute l'application pour me faire une idee. Les seules applications que je connaisses qui arrivent a utiliser plus de 2 GPU efficacement sont des applications qui ont des taches completement independentes avec tres peu de donnee. Du fait que tu ais 2 ou 10 GPUs, ca ne change pas grand chose parcequ'il y a beaucoup de calcul et peu de communication. En moyenne le multi GPU ca marche pas.

En passant, j'ai un doute sur ce que tu utilises. Tu utilises OpenMP?

C'est quoi ton application exactement?

vive_cod4
vive_cod4
Niveau 9
15 janvier 2014 à 15:04:27

OpenMP sers à lancer en parallèle mes différents kernels chaque thread va effectuer tout ce qui est nécessaire niveau mémoire puis lance le kernel. Sinon c'est du traitement d'images avec des filtres.

godrik
godrik
Niveau 30
15 janvier 2014 à 16:06:33

C'est quoi ton architecture cote CPU? Les kernels d'imagerie sont tres memory bound. Tu peux souvent quasiment streamer l'image en temps reel. Regarde les indices de performances standard. Combien de temps est ce que le kernel prensd un un seul GPU. Combien de temps ca prends de transferer l'image sur un seul GPU et regarde ou est le bottleneck de ton calcul. A mon avis, tu n'arrives pas a feeder les GPUs avec suffisament de donnee.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment