Partage
  • Partager sur Facebook
  • Partager sur Twitter

Parallel.for plus lent qu'un for

Sujet résolu
    24 mars 2011 à 10:40:35

    Bonjours a tous.

    Voila j'ai un petit souci, j'ai un trie a bulle pour tester la vitesse d'un parallel.for comparé a un for.
    Mais voila, mon parallel.for met 2 fois plus de temps que mon for

    (for ~ 30 secondes)
    (Parallel.For ~ 1min 04)

    Donc bon pas trés pratique ^^

    Voici mon code

    Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication7
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i;
                DateTime date, date1;
                int[] tb;
                int[] tb1;
                Cl_Trie oTrie;
                Random rndNumbers = new Random(500000);
                int rndNumber;
    
                oTrie = new Cl_Trie();
                tb = new int[50000];
                tb1 = new int[50000];
    
                for (i = 0; i < tb.Length; i++)
                {
                    rndNumber= rndNumbers.Next();
                    tb[i] = rndNumber;
                    tb1[i] = rndNumber;
                }
                date = DateTime.Now;
                oTrie.m_trie(tb);
                date1 = DateTime.Now;
                Console.WriteLine("Trie normal : {0}", date1 - date);
    
                date = DateTime.Now;
                oTrie.m_triePar(tb1);
                date1 = DateTime.Now;
                Console.WriteLine("Trie Paralelle : {0}", date1 - date);
            }
        }
    }
    


    Cl_Trie.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace ConsoleApplication7
    {
        class Cl_Trie
        {
            public int[] m_triePar(int[] tb)
            {
                bool ch = true;
                int tmp;
               
    
                do
                {
                    ch=true;
                  //  for (i = 0; i< tb.Length-1; i++)
    
    
                   Parallel.For(0,tb.Length-1 ,i=>{
                        if (tb[i] > tb[i + 1])
                        {
                            tmp = tb[i + 1];
                            tb[i + 1] = tb[i];
                            tb[i] = tmp;
                            ch = false;
                        }
                    });
    
    
                }while(ch==false);
    
                
    
    
                return tb;
            }
    
            public int[] m_trie(int[] tb)
            {
                bool ch = true;
                int tmp;
                int i;
    
                do
                {
                    ch = true;
                    
    
                    for(i=0; i<tb.Length - 1; i++)
                    {
                        if (tb[i] > tb[i + 1])
                        {
                            tmp = tb[i + 1];
                            tb[i + 1] = tb[i];
                            tb[i] = tmp;
                            ch = false;
                        }
                    }
    
    
                } while (ch == false);
    
    
    
    
                return tb;
            }
    
            public Cl_Trie()
            {
            }
        }
    }
    


    Merci pour vos éventuelles réponses ;)
    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2011 à 14:06:52

      Un Parralel.For n'est pas forcément plus rapide qu'un simple for, ça dépend de ce que tu fais dans ta boucle, de la puissance et du nombre de coeur de ton processeur
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2011 à 19:28:58

        Faire le tri d'un tableau en parrallèle... c'est juste ne pas avoir étudier un minimum la parallélisation.

        D'une part le fait de trier un tableau avec 2 thread en parallèle néccesitera un moment où il faudra aussi réorganiser le tri des 2 threads... donc perte de temps.

        Mais ce qu'il ne faut pas oublier c'est que la parallélisation nécessite une étape "invisible" où il faut créer les deux thread et tout ce qu'il faut pour les faire fonctionner.
        On perd là aussi du temps et c'est pour cela, en partie, que faire du multi-thread nécessite une réflexion préalable.

        Tu peux lire néanmoins cet article qui pose et répond à la même question, mais avec un exemple moins piégeur que le tri.

        http://codingndesign.com/blog/?p=112
        • Partager sur Facebook
        • Partager sur Twitter
          24 mars 2011 à 20:16:26

          Merci pour ces précisions ;)
          • Partager sur Facebook
          • Partager sur Twitter

          Parallel.for plus lent qu'un for

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown