Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

TPL & Map Reduce

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 31-05-2012, 13:47. Υπάρχουν 17 απαντήσεις.
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-05-2012, 22:27 70396

    TPL & Map Reduce

    Γνωρίζει κανείς κανένα παράδειγμα ή αν γενικά μπορούμε με TPL να εφαρμόσουμε Map - Reduce ???

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  25-05-2012, 23:00 70397 σε απάντηση της 70396

    Απ: TPL & Map Reduce

    Τί ακριβώς θέλεις να κάνεις? Το TPL εκτελεί tasks τοπικά ενώ το Map/Reduce χρησιμοποιείται κατά κανόνα για να σπάσει η επεξεργασία σε πολλούς υπολογιστές. Παρόλα αυτά, έχει νόημα να χρησιμοποιήσεις MapReduce αν θέλεις να εκτελέσεις ένα αλγόριθμο γρήγορα σε ένα υπολογιστή.

    Καταρχήν, το PLINQ και οι μέθοδοι looping της  Parallel  μπορούν να χρησιμοποιηθούν για να υλοποιησεις εύκολα ένα αλγόριθμο MapReduce: τo Where, Select, For ουσιαστικά αντιστοιχούν στο map καθώς εκτελούνται σε διαφορετικούς επεξεργαστές ενώ τυχόν aggregate functions που θα καλέσεις στο αποτέλεσμα, ή το enumeration που θα κάνεις, αντιστοιχούν στο Reduce. 

    Το ParallelExtensionsExtras  περιέχει ξεχωριστά functions Map και Reduce στην κλάση ParallelAlgorithms για να υλοποιήσεις αλγόριθμους που δεν προσαρμόζονται εύκολα στο PLINQ αν και όπως θα δεις, η υλοποίηση χρησιμοποιεί το Parallel.For.

    Μπορείς να δεις παραδείγματα υλοποίησης MapReduce στο κεφάλαιο Parallel Aggregation του Parallel Programming with .NET. Τα παραδείγματα χρησιμοποιούν τόσο PLINQ όσο και Parallel loops 

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2012, 09:34 70420 σε απάντηση της 70397

    Απ: TPL & Map Reduce

    Ντροπή! Κάνεις μία ενδιαφέρουσα ερώτηση και την εγκαταλείπεις, και μας αφήνεις σε αναμένα κάρβουνα?

    Υπάρχει άλλος ένας τρόπος να υλοποιήσεις Map-Reduce, χρησιμοποιώντας τα ActionBlock  από τα Dataflow components της TPL. Μπορείς να ορίσεις ένα ActionBlock το οποίο θα υλοποιεί το map function και ένα το reduce function. Ένα action block υποστηρίζει μόνο ένα ταυτόχρονο task by default αλλά μπορείς άνετα να αλλάξεις τον αριθμό των παράλληλων tasks με μία παράμετρο. Με τον τρόπο αυτό μπορείς να ορίσεις ένα ολόκληρο pipeline το οποίο θα χρησιμοποιεί διαφορετικό parallelism για κάθε φάση.
    Κάθε ActionBlock έχει το δικό του input και output queue ενώ μπορείς να προσθέσεις και ξεχωριστά BufferBlock αν θέλεις κάποιο διαφορετικό buffering. Με τον τρόπο αυτό εξασφαλίζεις ότι κάθε block θα δουλεύει όσο γρήγορα μπορεί χωρίς να μπλοκάρει τα επόμενα ή προηγούμενα.

    Όπως λέει και το όνομα, το Dataflow είναι πολύ καλό όταν έχεις συνεχή ροή δεδομένων. 

    Είτε με το TPL μόνο του, είτε με το Dataflow, μπορείς να σπάσεις την επεξεργασία σε διαφορετικά μηχανήματα βάζοντας τα blocks που κάνουν το map και τα blocks που κάνουν το reduce σε διαφορετικά σίδερα και στέλνοντας τα δεδομένα από το ένα μηχάνημα στο άλλο. Εδώ βέβαια θα πρέπει να φτιάξεις μόνος σου τον κώδικα που θα στέλνει/λαμβάνει τα μηνύματα, καθώς και το mapping από mapper σε reducer. 

    Τέλος, μπορείς να χρησιμοποιήσεις συνδυασμούς κλάσεων και από τις δύο βιβλιοθήκες. Για παράδειγμα, μπορείς να χρησιμοποιήσεις τα BufferBlock για να αποθηκεύεις γρήγορα τα μηνύματα που λαμβάνεις από τους mapper, απλοποιώντας φοβερά τον κώδικα της επικοινωνίας. Ή μπορείς να χρησιμοποιήσεις τα BufferBlock ως ενδιάμεση φάση ανάμεσα στα mapper και reducer loops σε μία λύση με Parallel.For

    Έλα, πες τί έχεις στο μυαλό σου, μή μας βασανίζεις!

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2012, 16:06 70449 σε απάντηση της 70420

    Απ: TPL & Map Reduce

    Χεχε δεν την εγκατέλειψα (Η HOL φταιει)  είδα με PLINQ παράδειγμα όπως αναφέρεις... αλλά ακόμη ψάχνω να καταλάβω.
    Απλά έχω δει σε MPI map reduce και με την TPL ήθελα να δω τι μπορώ να κάνω .

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  29-05-2012, 18:51 70451 σε απάντηση της 70449

    Απ: TPL & Map Reduce

    Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):

    Implementing parallel algorithms of MapReduce

    Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.

    Απογοητεύτηκα λίγο από το Parallel Programming with Microsoft .NET, κυρίως γιατί προσπαθεί να πουλήσει μέσω του CodePlex. Αλήθεια, διαφέρει σε κάτι από το Patterns for Parallel Programming που μπορεί κανείς να κατεβάσει από το download center της Microsoft;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  29-05-2012, 21:01 70456 σε απάντηση της 70420

    Απ: TPL & Map Reduce

    Βρήκα το παρακάτω παράδειγμα σε PLINQ για map / reduce κάτι απλό :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            public static List<string> words = new List<string>
            {
                "there","is","a",
                "great","house","and",
                "an","amazing","lake",
                "there","is","a","computer",
                "running","a","new","query","there",
                "is","a","greate","server","ready","to","process",
                "map","and","reduce"
            };
    
            static void Main(string[] args)
            {
                // Map
                // Generate a (word, 1) key, value pair
                ILookup<string, int> map = words.AsParallel().ToLookup(p => p, k => 1);
                // End of Map
                // Reduce
                // Calculate the number of times a word appears and
                // select the words that appear more than once
                var reduce = from IGrouping<string, int> wordMap
                in map.AsParallel()
                where wordMap.Count() > 1
                select new
                { Word = wordMap.Key, Count = wordMap.Count() };
                // End of Reduce
                // Show each word and the number of times it appears
                foreach (var word in reduce)
                Console.WriteLine("Word: '{0}'; Count: {1}",
                word.Word, word.Count);
                Console.ReadLine();
            }


    Οκ με το map το reduce query είναι σωστό ???
    και γιατί είναι τόσο αργό ?

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  29-05-2012, 23:32 70459 σε απάντηση της 70451

    Απ: TPL & Map Reduce

    Markos:
    Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):

    Implementing parallel algorithms of MapReduce

    Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.

    Απογοητεύτηκα λίγο από το Parallel Programming with Microsoft .NET, κυρίως γιατί προσπαθεί να πουλήσει μέσω του CodePlex. Αλήθεια, διαφέρει σε κάτι από το Patterns for Parallel Programming που μπορεί κανείς να κατεβάσει από το download center της Microsoft;

    Μάρκο, μάλλον τα έμπλεξες. Αυτό που είδες στο codeplex είναι διαθέσιμο online τσάμπα από την Microsoft. Το βιβλίο, σε ebook ή τυπωμένο είναι διαθέσιμο από την O'Reilly και δεν είναι τσάμπα. Αν δεν θέλεις να το αγοράσεις, απλά διάβασε το online.

    Νομίζω ότι δεν είναι η καλύτερη τακτική να κρίνεις ένα βιβλίο επειδή κάποιες εκδόσεις του δεν είναι τσάμπα.

    Και το Patterns είναι όντως άλλο βιβλίο.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2012, 23:37 70460 σε απάντηση της 70449

    Απ: TPL & Map Reduce

    Bill :
    Χεχε δεν την εγκατέλειψα (Η HOL φταιει)  είδα με PLINQ παράδειγμα όπως αναφέρεις... αλλά ακόμη ψάχνω να καταλάβω.
    Απλά έχω δει σε MPI map reduce και με την TPL ήθελα να δω τι μπορώ να κάνω .

    Το MPI ταιριάζει περισσότερο στη λογική του Dataflow και των agents. Εϊναι κι αυτό άλλη μία τεχνική, η οποία κυρίως εφαρμόζεται όταν έχεις πραγματικά πολλούς επεξεργαστές, ή/και ασύμμετρες αρχιτεκτονικές όπως NUMA. Σε τέτοιες περιπτώσεις κάθε επεξεργαστής έχει ταχύτερη πρόσβαση σε ένα μέρος της μνήμης και αργότερη στην υπόλοιπη. Εκεί έχει νόημα το κάθε processing block να μιλάει με τα άλλα μέσω μηνυμάτων και μόνο. Το TPL δεν εκμεταλλεύεται ούτε καταλαβαίνει αυτές τις αρχιτεκτονικές, καθώς πρόκειται για ένα γενικό μηχανισμό να επεξεργαστεί δεδομένα παράλληλα.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2012, 23:43 70461 σε απάντηση της 70456

    Απ: TPL & Map Reduce

    Bill :
    Βρήκα το παρακάτω παράδειγμα σε PLINQ για map / reduce κάτι απλό :

    Οκ με το map το reduce query είναι σωστό ???
    και γιατί είναι τόσο αργό ?

    Το παράδειγμα είναι πολύ μικρό για να δεις επιτάχυνση από την παράλληλη επεξεργασία. Επιπλέον, το parallel processing έχει το δικό του overhead. Σε τόσο μικρό δείγμα το overhead είναι πολύ μεγαλύτερο από τον καθαρό χρόνο επεξεργασίας.

    Επιπλέον, το PLINQ ελέγχει τον όγκο των δεδομένων και τον αριθμό των cores και μπορεί να αποφασίσει να χρησιμοποιήσει μόνο 1 core αν κρίνει ότι το overhead είναι πολύ μεγάλο. Στο .NET 4.0 ο αλγόριθμος που επιλέγει τα cores είναι συντηρητικός ενώ στο 4.5 επιτρέπει την παράλληλη επεξεργασία σε πολύ περισσότερες περιπτώσεις.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-05-2012, 13:38 70465 σε απάντηση της 70451

    Απ: TPL & Map Reduce

    Markos:
    Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):

    Implementing parallel algorithms of MapReduce

    Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.

    Διαβάζοντας το paper βλέπω τον πραγματικό κώδικα να λάμπει δια της απουσίας του: δεν υπάρχει πουθενά ο κώδικας των map, reduce. Ο κώδικας που δίνεται είναι μόνο το scaffolding. Είναι απλά αδύνατον να βγάλεις συμπέρασμα κοιτώντας το scaffolding. 

    Και το χειρότερο, η χρήση ενός Duo σημαίνει ότι δεν υπάρχει καμμία ένδειξη για το πως κάνει scale η κάθε υλοποίηση. Το MapReduce δεν φτιάχτηκε για 2 επεξεργαστές αλλά για να εκμεταλλεύεται όσο περισσότερους επεξεργαστές γίνεται. Και μόνο η χρήση locks στην υλοποίηση με C++ και OpenMP σημαίνει ότι το scale είναι κακό. Το ότι τρέχει μέσα στο ίδιο thread και το map και το reduce, σημαίνει απλά ότι η υλοποίηση ΔΕΝ είναι map reduce.

    Όσο για τη χρήση ενός απλού Parallel.For στην υλοποίηση για TPL, μαζί με LOCK για να γράψει σε ένα dictionary .... εντάξει ο τύπος δεν ξέρει από TPL και μιλάει. Τί να πω. Προφανώς δεν άκουσε ποτέ για concurrent collections ή για άλλα πιο χρήσιμα primitives όπως η Interlocked.Increment

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-05-2012, 13:48 70466 σε απάντηση της 70465

    Απ: TPL & Map Reduce

    Ειλικρινά χτες αυτό έβλεπα και αναρωτιομουν γιατι δεν καταλαβαίνω γρι απο όσα λεεί. Επίσης δίνει και αποτελέσματα ως προς το χρόνο και μου ήρθε πολύ περιέργο που η F# είναι αργή.
    anyway....

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  30-05-2012, 13:59 70467 σε απάντηση της 70466

    Απ: TPL & Map Reduce

    Έριξα μόλις τώρα μία ματιά στο project που αναφέρει στο codeplex, και βρήκα την φοβερή SumThreadResult που απαιτεί locks. Ο λόγος που το κάνει αυτό είναι επειδή εκεί μέσα φτιάχνει ένα dictionary που πάει και το αποθηκεύει στην θέση που βρισκόταν πριν ένα άλλο dictionary. To lock, του lock 
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-05-2012, 18:57 70468 σε απάντηση της 70465

    Απ: TPL & Map Reduce

    Στα "Acknowledgements" αναφέρει ότι η συγκεκριμένη έρευνα, καθώς και το "Parallel Dwarfs" project, χρηματοδοτήθηκαν εν μέρει από τη Microsoft. Μόλις τώρα είδα ότι το Parallel Dwarfs project είναι ανεβασμένο στο Codeplex, οπότε μπορεί κάποιος ελεύθερα να το μελετήσει. Μου φαίνεται, λοιπόν, λίγο τραβηγμένο τα αποτελέσματα να είναι μεροληπτικά. Βέβαια, ποτέ δε μπορείς να αποκλείσεις την ύπαρξη σφαλμάτων.

    Πάντως η έρευνα δείχνει να έχει σταματήσει στο 2009....

    ΥΓ: Δε σκοπεύω ν' ασχοληθώ μαζί του, τουλάχιστον στην παρούσα συγκυρία.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  30-05-2012, 23:48 70473 σε απάντηση της 70420

    Απ: TPL & Map Reduce

    Έχω ψάξει και έχω δει το ActionBlock απο τα DataFlow που λες τα οποία είναι πολυ ελκυστικά αν όντως έχουν καλά αποτελεσμα . Αλλά έχω χαθεί ένα απλό παράδειγμα που να τα δένεις όλα αυτά και με το BufferBlock στο τέλος θα με βοηθούσε αρκετά να το αποσαφηνίσω.
    Ψάχνω στο google και δε βρίσκω κάτι με όλα τα καλούδια αυτά...!!
    Ζητάω πολλά ε Big Smile

    Υ.Γ και στην Bing τίποτε..

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  30-05-2012, 23:58 70474 σε απάντηση της 70461

    Απ: TPL & Map Reduce

    Αυτό που αναφέρεις ότι είναι συντηριτικός ο αλγόριθμος σε PLINQ μπορούμε να το αλλάξουμε όπως είδα με το WithExecutionMode.(ParallelExecutionMode.ForceParallelism) στο PLINQ ερώτημα και να το εκτελέσουμε με ότι κόστος συνεπάγετε αυτό παράλληλα (βέβαια αυτό μπορεί να είναι και κακή τεχνική αν ο φόρτος εργασίας του μηχανήματος είναι μεγάλος) .

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems