<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70482.aspx</link><pubDate>Thu, 31 May 2012 20:47:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70482</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70482.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70482</wfw:commentRss><description>Νομίζω ότι βρήκα ένα καλό παράδειγμα στο &lt;a href="http://msdn.microsoft.com/en-us/library/ff963547"&gt;Parallel Aggregation&lt;/a&gt;&amp;nbsp;το οποίο εξετάζει το map/reduce ως παραλλαγή του Parallel Aggregation.&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Έστω ότι έχεις ένα social network και θέλεις να κάνεις friend recommendations. Τα recommendations θα είναι τα μέλη που δεν είναι φίλοι σου αλλά έχετε τους περισσότερους mutual.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Στο πρώτο βήμα, ο αλγόριθμος βρίσκει τους φίλους των φίλων σου που δεν είναι ήδη φίλοι. Αυτό θα βγάλει μία λίστα με candidates από κάθε φίλο. Στο δεύτερο βήμα, ο αλγόριθμος υπολογίζει για κάθε candidate τον αριθμό των mutuals. Τέλος, επιλέγει τους top X για να σου τους προτείνει&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το πρώτο βήμα αντιστοιχεί στο Map (από φίλους σε candidates) ενώ το δεύτερο το reduce (από πολλαπλές λίστες candidates σε ένα set από candidates με την αξιολόγηση τους).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και τα δύο βήματα είναι σχετικά απλά, οπότε η αξία του map/reduce προέρχεται από το ότι μπορεί να κατανείμει το κάθε βήμα σε όσο το δυνατόν περισσότερα cores χωρίς προβλήματα blocking: ο κάθε mapper ή reducer παίρνει το δικό του αντίγραφο των δεδομένων χωρίς προβλήματα locking αφού δεν μοιράζεται τίποτε με τους άλλους.&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70481.aspx</link><pubDate>Thu, 31 May 2012 17:51:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70481</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70481.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70481</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Bill :&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Αυτό που αναφέρεις ότι είναι συντηριτικός ο αλγόριθμος σε PLINQ μπορούμε να το αλλάξουμε όπως είδα με το WithExecutionMode.(ParallelExecutionMode.ForceParallelism) στο PLINQ ερώτημα και να το εκτελέσουμε με ότι κόστος συνεπάγετε αυτό παράλληλα (βέβαια αυτό μπορεί να είναι και κακή τεχνική αν ο φόρτος εργασίας του μηχανήματος είναι μεγάλος) .&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;Δεν είναι θέμα φόρτου. Αν το overhead της παράλληλης επεξεργασίας είναι μεγαλύτερο από &amp;nbsp;το όφελος, το ForceParallelism θα προκαλέσει καθυστέρηση, όχι επιτάχυνση. Από την άλλη, υπάρχουν απλά περιπτώσεις που το .NET 4 θα κάνει λαθος. Αν π.χ. εκτελείς μία μακρόχρονη ασύγχρονη διαδικασία μέσα στο PLINQ query, μπορείς να σηκώσεις πολύ περισσότερα ταυτόχρονα tasks απ' ότι αν εκτελείς CPU heavy αλγόριθμους. Το PLINQ δεν το ξέρει όμως και έτσι επιλέγει συντηρητικά.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Για να πεις στο PLINQ πόσα ταυτόχρονα tasks να σηκώσει χρησιμοποιείς την &amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/dd383719.aspx"&gt;WithDegreeOfParallelism&lt;/a&gt;&amp;nbsp;για να δώσεις μέχρι 64 ταυτόχρονα tasks. Λογικό το νούμερο αν μιλάμε για CPU bound (ποιός έχει μηχάνημα με 64 cores?) μικρό αν μιλάμε για ασύγχρονη επεξεργασία, όπως π.χ. crawling&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;Επιπλέον, υπάρχουν operations που το .NET 4 θα εκτελέσει πάντα σύγχρονα ενώ το 4.5 θα εκτελέσει παράλληλα. Το &lt;a href="http://blogs.msdn.com/b/pfxteam/archive/2011/11/11/10235999.aspx"&gt;PLINQ Queries that run in parallel in .NET 4.5&lt;/a&gt;&amp;nbsp;του Stephen Toub έχει ένα πίνακα με τις εντολές που εκτελούνται πλέον παράλληλα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Τέλος, το πρόβλημα με τα παραδείγματα που ψάχνεις είναι ότι ζητάς κάτι πολύ συγκεκριμένο - ΚΑΙ MapReduce ΚΑΙ TPL ΚΑΙ ένα μόνο μηχάνημα. Τα περισσότερα παραδείγματα ασχολούνται με ένα αντικείμενο τη φορά.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ειδικά για το word count μπορείς να δεις &lt;a href="http://msdn.microsoft.com/en-us/library/hh228604(v=VS.110).aspx"&gt;αυτό το walkthrough&lt;/a&gt; για το DataFlow, όπου σπάει το πρόβλημα σε βήματα ξεκινώντας από το split του αρχικού κειμένου. Το παράδειγμα που κοίταζες στην αρχή θεωρεί ότι το αρχείο έχει ήδη γίνει split σε λέξεις, κάτι το οποίο κοστίζει αρκετά και μπορεί να γίνει επίσης ασύγχρονα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μπορεί να μην είναι το καλύτερο παράδειγμα για map reduce, αλλά δίνει μία καλή εικόνα μίας πιο γενικής αντιμετώπισης (pipeline από agents, όχι μόνο mappers, reducers).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Για να δούμε μήπως βρούμε κανα καλύτερο παράδειγμα (ή το χρόνο να γράψουμε κανένα)&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70475.aspx</link><pubDate>Thu, 31 May 2012 08:16:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70475</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70475.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70475</wfw:commentRss><description>Έχεις διαβάσει το "&lt;a href="http://www.drdobbs.com/article/print?articleId=232600819&amp;amp;siteSectionName="&gt;PLINQ: Parallel queries in .NET&lt;/a&gt;";&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70474.aspx</link><pubDate>Thu, 31 May 2012 06:58:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70474</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70474.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70474</wfw:commentRss><description>Αυτό που αναφέρεις ότι είναι συντηριτικός ο αλγόριθμος σε PLINQ μπορούμε να το αλλάξουμε όπως είδα με το WithExecutionMode.(ParallelExecutionMode.ForceParallelism) στο PLINQ ερώτημα και να το εκτελέσουμε με ότι κόστος συνεπάγετε αυτό παράλληλα (βέβαια αυτό μπορεί να είναι και κακή τεχνική αν ο φόρτος εργασίας του μηχανήματος είναι μεγάλος) .&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70473.aspx</link><pubDate>Thu, 31 May 2012 06:48:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70473</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70473.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70473</wfw:commentRss><description>Έχω ψάξει και έχω δει το ActionBlock απο τα DataFlow που λες τα οποία είναι πολυ ελκυστικά αν όντως έχουν καλά αποτελεσμα . Αλλά έχω χαθεί ένα απλό παράδειγμα που να τα δένεις όλα αυτά και με το BufferBlock στο τέλος θα με βοηθούσε αρκετά να το αποσαφηνίσω.&lt;br&gt;Ψάχνω στο google και δε βρίσκω κάτι με όλα τα καλούδια αυτά...!!&lt;br&gt;Ζητάω πολλά ε &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br&gt;&lt;br&gt;Υ.Γ και στην Bing τίποτε..&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70468.aspx</link><pubDate>Thu, 31 May 2012 01:57:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70468</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70468.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70468</wfw:commentRss><description>Στα "Acknowledgements" αναφέρει ότι η συγκεκριμένη έρευνα, καθώς και το "Parallel Dwarfs" project, χρηματοδοτήθηκαν εν μέρει από τη Microsoft. Μόλις τώρα είδα ότι το &lt;a href="http://paralleldwarfs.codeplex.com/"&gt;Parallel Dwarfs&lt;/a&gt; project είναι ανεβασμένο στο Codeplex, οπότε μπορεί κάποιος ελεύθερα να το μελετήσει. Μου φαίνεται, λοιπόν, λίγο τραβηγμένο τα αποτελέσματα να είναι μεροληπτικά. Βέβαια, ποτέ δε μπορείς να αποκλείσεις την ύπαρξη σφαλμάτων.&lt;br&gt;&lt;br&gt;Πάντως η έρευνα δείχνει να έχει σταματήσει στο 2009....&lt;br&gt;&lt;br&gt;ΥΓ: Δε σκοπεύω ν' ασχοληθώ μαζί του, τουλάχιστον στην παρούσα συγκυρία.&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70467.aspx</link><pubDate>Wed, 30 May 2012 20:59:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70467</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70467.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70467</wfw:commentRss><description>Έριξα μόλις τώρα μία ματιά στο project που αναφέρει στο codeplex, και βρήκα την φοβερή SumThreadResult που απαιτεί locks. Ο λόγος που το κάνει αυτό είναι επειδή εκεί μέσα φτιάχνει ένα dictionary που πάει και το αποθηκεύει στην θέση που βρισκόταν πριν ένα άλλο dictionary. To lock, του lock&amp;nbsp;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70466.aspx</link><pubDate>Wed, 30 May 2012 20:48:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70466</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70466.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70466</wfw:commentRss><description>Ειλικρινά χτες αυτό έβλεπα και αναρωτιομουν γιατι δεν καταλαβαίνω γρι απο όσα λεεί. Επίσης δίνει και αποτελέσματα ως προς το χρόνο και μου ήρθε πολύ περιέργο που η F# είναι αργή.&lt;br&gt;anyway....&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70465.aspx</link><pubDate>Wed, 30 May 2012 20:38:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70465</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70465.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70465</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):&lt;br&gt;&lt;br&gt;&lt;a href="http://www.inf.usi.ch/phd/fedyukovich/Research_files/fedyukovich_worldcomp.pdf"&gt;Implementing parallel algorithms of MapReduce&lt;/a&gt;&lt;br&gt;&lt;br&gt;Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Διαβάζοντας το paper βλέπω τον πραγματικό κώδικα να λάμπει δια της απουσίας του: δεν υπάρχει πουθενά ο κώδικας των map, reduce. Ο κώδικας που δίνεται είναι μόνο το scaffolding. Είναι απλά αδύνατον να βγάλεις συμπέρασμα κοιτώντας το scaffolding.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και το χειρότερο, η χρήση ενός Duo σημαίνει ότι δεν υπάρχει καμμία ένδειξη για το πως κάνει scale η κάθε υλοποίηση. Το MapReduce δεν φτιάχτηκε για 2 επεξεργαστές αλλά για να εκμεταλλεύεται όσο περισσότερους επεξεργαστές γίνεται. Και μόνο η χρήση locks στην υλοποίηση με C++ και OpenMP σημαίνει ότι το scale είναι κακό. Το ότι τρέχει μέσα στο ίδιο thread και το map και το reduce, σημαίνει απλά ότι η υλοποίηση ΔΕΝ είναι map reduce.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Όσο για τη χρήση ενός απλού Parallel.For στην υλοποίηση για TPL, μαζί με LOCK για να γράψει σε ένα dictionary .... εντάξει ο τύπος δεν ξέρει από TPL και μιλάει. Τί να πω. Προφανώς δεν άκουσε ποτέ για concurrent collections ή για άλλα πιο χρήσιμα primitives όπως η &lt;a href="http://msdn.microsoft.com/en-us/library/dd78zt0c.aspx"&gt;Interlocked.Increment&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70461.aspx</link><pubDate>Wed, 30 May 2012 06:43:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70461</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70461.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70461</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Bill :&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Βρήκα το παρακάτω παράδειγμα σε PLINQ για map / reduce κάτι απλό :&lt;br&gt;&lt;br&gt;Οκ με το map το reduce query είναι σωστό ???&lt;br&gt;και γιατί είναι τόσο αργό ?&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το παράδειγμα είναι πολύ μικρό για να δεις επιτάχυνση από την παράλληλη επεξεργασία. Επιπλέον, το parallel processing έχει το δικό του overhead. Σε τόσο μικρό δείγμα το overhead είναι πολύ μεγαλύτερο από τον καθαρό χρόνο επεξεργασίας.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επιπλέον, το PLINQ ελέγχει τον όγκο των δεδομένων και τον αριθμό των cores και μπορεί να αποφασίσει να χρησιμοποιήσει μόνο 1 core αν κρίνει ότι το overhead είναι πολύ μεγάλο. Στο .NET 4.0 ο αλγόριθμος που επιλέγει τα cores είναι συντηρητικός ενώ στο 4.5 επιτρέπει την παράλληλη επεξεργασία σε πολύ περισσότερες περιπτώσεις.&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70460.aspx</link><pubDate>Wed, 30 May 2012 06:37:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70460</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70460.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70460</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Bill :&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Χεχε δεν την εγκατέλειψα (Η HOL φταιει)&amp;nbsp; είδα με PLINQ παράδειγμα όπως αναφέρεις... αλλά ακόμη ψάχνω να καταλάβω. &lt;br&gt;Απλά έχω δει σε MPI map reduce και με την TPL ήθελα να δω τι μπορώ να κάνω . &lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το MPI ταιριάζει περισσότερο στη λογική του Dataflow και των agents. Εϊναι κι αυτό άλλη μία τεχνική, η οποία κυρίως εφαρμόζεται όταν έχεις πραγματικά πολλούς επεξεργαστές, ή/και ασύμμετρες αρχιτεκτονικές όπως NUMA. Σε τέτοιες περιπτώσεις κάθε επεξεργαστής έχει ταχύτερη πρόσβαση σε ένα μέρος της μνήμης και αργότερη στην υπόλοιπη. Εκεί έχει νόημα το κάθε processing block να μιλάει με τα άλλα μέσω μηνυμάτων και μόνο. Το TPL δεν εκμεταλλεύεται ούτε καταλαβαίνει αυτές τις αρχιτεκτονικές, καθώς πρόκειται για ένα γενικό μηχανισμό να επεξεργαστεί δεδομένα παράλληλα.&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70459.aspx</link><pubDate>Wed, 30 May 2012 06:32:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70459</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70459.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70459</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):&lt;br&gt;&lt;br&gt;&lt;a href="http://www.inf.usi.ch/phd/fedyukovich/Research_files/fedyukovich_worldcomp.pdf"&gt;Implementing parallel algorithms of MapReduce&lt;/a&gt;&lt;br&gt;&lt;br&gt;Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.&lt;br&gt;&lt;br&gt;Απογοητεύτηκα λίγο από το &lt;a href="http://parallelpatterns.codeplex.com/"&gt;Parallel Programming with Microsoft .NET&lt;/a&gt;, κυρίως γιατί προσπαθεί να πουλήσει μέσω του CodePlex. Αλήθεια, διαφέρει σε κάτι από το &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=19222"&gt;Patterns for Parallel Programming&lt;/a&gt; που μπορεί κανείς να κατεβάσει από το download center της Microsoft;&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μάρκο, μάλλον τα έμπλεξες. Αυτό που είδες στο codeplex είναι διαθέσιμο online τσάμπα από την Microsoft. Το βιβλίο, σε ebook ή τυπωμένο είναι διαθέσιμο από την O'Reilly και δεν είναι τσάμπα. Αν δεν θέλεις να το αγοράσεις, απλά διάβασε το online.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Νομίζω ότι δεν είναι η καλύτερη τακτική να κρίνεις ένα βιβλίο επειδή κάποιες εκδόσεις του δεν είναι τσάμπα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και το Patterns είναι όντως άλλο βιβλίο.&lt;/div&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70456.aspx</link><pubDate>Wed, 30 May 2012 04:01:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70456</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70456.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70456</wfw:commentRss><description>Βρήκα το παρακάτω παράδειγμα σε PLINQ για map / reduce κάτι απλό :&lt;br&gt;&lt;br&gt;&lt;table style="background-color:#f2f2f2;border:solid 1px #e5e5e5;" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tr style="vertical-align:top;line-height:normal;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;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
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt;&amp;gt; words &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt;&amp;gt;
        {
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"there"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"is"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"a"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"great"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"house"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"and"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"an"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"amazing"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"lake"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"there"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"is"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"a"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"computer"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"running"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"a"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"new"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"query"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"there"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"is"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"a"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"greate"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"server"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"ready"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"to"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"process"&lt;/span&gt;,
            &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"map"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"and"&lt;/span&gt;,&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"reduce"&lt;/span&gt;
        };

        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Map&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Generate a (word, 1) key, value pair&lt;/span&gt;
            ILookup&amp;lt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt;, &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt;&amp;gt; map &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; words.AsParallel().ToLookup(p =&amp;gt; p, k =&amp;gt; 1);
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// End of Map&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Reduce&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Calculate the number of times a word appears and&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// select the words that appear more than once&lt;/span&gt;
            var reduce &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; from IGrouping&amp;lt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt;, &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt;&amp;gt; wordMap
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;in&lt;/span&gt; map.AsParallel()
            where wordMap.Count() &amp;gt; 1
            select &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt;
            { Word &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; wordMap.Key, Count &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; wordMap.Count() };
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// End of Reduce&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Show each word and the number of times it appears&lt;/span&gt;
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;foreach&lt;/span&gt; (var word &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;in&lt;/span&gt; reduce)
            Console.WriteLine(&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Word: '{0}'; Count: {1}"&lt;/span&gt;,
            word.Word, word.Count);
            Console.ReadLine();
        }&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;Οκ με το map το reduce query είναι σωστό ???&lt;br&gt;και γιατί είναι τόσο αργό ?&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70451.aspx</link><pubDate>Wed, 30 May 2012 01:51:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70451</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70451.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70451</wfw:commentRss><description>Εντελώς ενημερωτικά, έπεσα πάνω σε ένα paper (κάτι που δε συμβαίνει και τόσο συχνά):&lt;br&gt;&lt;br&gt;&lt;a href="http://www.inf.usi.ch/phd/fedyukovich/Research_files/fedyukovich_worldcomp.pdf"&gt;Implementing parallel algorithms of MapReduce&lt;/a&gt;&lt;br&gt;&lt;br&gt;Δεν ξέρω αν τα αποτελέσματα είναι χαρακτηριστικά, αλλά τα threads φαίνεται να κερδίζουν, ενώ η F# εμφανίζεται ως η πιο αργή.&lt;br&gt;&lt;br&gt;Απογοητεύτηκα λίγο από το &lt;a href="http://parallelpatterns.codeplex.com/"&gt;Parallel Programming with Microsoft .NET&lt;/a&gt;, κυρίως γιατί προσπαθεί να πουλήσει μέσω του CodePlex. Αλήθεια, διαφέρει σε κάτι από το &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=19222"&gt;Patterns for Parallel Programming&lt;/a&gt; που μπορεί κανείς να κατεβάσει από το download center της Microsoft;&lt;br&gt;</description></item><item><title>Απ: TPL &amp; Map Reduce</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70449.aspx</link><pubDate>Tue, 29 May 2012 23:06:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70449</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70449.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=70449</wfw:commentRss><description>Χεχε δεν την εγκατέλειψα (Η HOL φταιει)&amp;nbsp; είδα με PLINQ παράδειγμα όπως αναφέρεις... αλλά ακόμη ψάχνω να καταλάβω. &lt;br&gt;Απλά έχω δει σε MPI map reduce και με την TPL ήθελα να δω τι μπορώ να κάνω . &lt;br&gt;</description></item></channel></rss>