Έχουν δημοσιευτεί Δευτέρα, 2 Μαρτίου 2009 7:02 μμ από το μέλος PALLADIN

Parallel Future

Όσοι φίλοι ενδιαφέρονται για parallel programming, τότε σίγουρα θα βρούν εξαιρετικά ενδιαφέρουσα την παρουσίαση που έκανε
ο Daniel Moth πριν από μερικούς μήνες στην Αθηνα.

Την ώρα που παρακολουθούσα το code demo ... μου ήρθε η ιδέα να κάνω abstract το recursive tree traversal και
να "κρύψω" το parallelism πίσω από την "μαγική" fold.

Μετά από λίγο πειραματισμό με το νέο Parallel API, κατέληξα σε αυτό:

interface IBinaryTreeNode<out T>
{
   IBinaryTreeNode<T> Left { get; }
   IBinaryTreeNode<T> Right { get; }
   T Data { get; }
}

static TResult FoldBinaryTree<TInput, TResult>(IBinaryTreeNode<TInput> treeNode, Func<TInput, TResult, TResult, TResult> accumulatorFunc, Func<TResult> seedFunc)
{
   if (treeNode == null) return seedFunc();

   Future<TResult> leftFuture = new Future<TResult>(() => FoldBinaryTree(treeNode.Left, accumulatorFunc, seedFunc));
   leftFuture.Start();
   Future<TResult> rightFuture = new Future<TResult>(() => FoldBinaryTree(treeNode.Right, accumulatorFunc, seedFunc));
   rightFuture.Start();

   return accumulatorFunc(treeNode.Data, leftFuture.Value, rightFuture.Value);
}

int numberOfNodes = FoldBinaryTree(treeNode, (_, numberOfLeftChildren, numberOfRightChildren) => 1 + numberOfLeftChildren + numberOfRightChildren, () => 0);

The future is parallel

Share


Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
προαιρετικό
απαιτούμενο
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image