From 91eadfd1ea1544513258fc30bf94ef384db2ad90 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Fri, 17 Jun 2011 16:19:04 -0700 Subject: [PATCH] Added a parallel fibonacci program. It doesn't actually run in parallel yet, but it will give us something fun to test threading with. --- src/test/bench/shootout/pfib.rs | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/bench/shootout/pfib.rs diff --git a/src/test/bench/shootout/pfib.rs b/src/test/bench/shootout/pfib.rs new file mode 100644 index 000000000000..60f2d3779c19 --- /dev/null +++ b/src/test/bench/shootout/pfib.rs @@ -0,0 +1,41 @@ +// -*- rust -*- + +/* + A parallel version of fibonacci numbers. +*/ + +fn recv[T](&port[T] p) -> T { + let T x; + p |> x; + ret x; +} + +fn fib(int n) -> int { + fn pfib(chan[int] c, int n) { + if (n == 0) { + c <| 0; + } + else if (n <= 2) { + c <| 1; + } + else { + let port[int] p = port(); + + auto t1 = spawn pfib(chan(p), n - 1); + auto t2 = spawn pfib(chan(p), n - 2); + + c <| recv(p) + recv(p); + } + } + + let port[int] p = port(); + auto t = spawn pfib(chan(p), n); + ret recv(p); +} + +fn main() { + assert (fib(8) == 21); + assert (fib(15) == 610); + log fib(8); + log fib(15); +}