From b4a145e60f4bbc90dc780239cc49c024b9f52ca8 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Tue, 28 Jun 2011 17:58:44 -0700 Subject: Added a nanosecond timer to time.rs, support for some floating point casts, and a commandline-driven mode for pfib.rs --- src/test/bench/shootout/pfib.rs | 71 +++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 24 deletions(-) (limited to 'src/test') diff --git a/src/test/bench/shootout/pfib.rs b/src/test/bench/shootout/pfib.rs index f7fda8b8110..cbe0813efc4 100644 --- a/src/test/bench/shootout/pfib.rs +++ b/src/test/bench/shootout/pfib.rs @@ -4,38 +4,61 @@ A parallel version of fibonacci numbers. */ +use std; + +import std::vec; +import std::uint; +import std::time; +import std::str; + fn recv[T](&port[T] p) -> T { - let T x; - p |> x; - ret x; + 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(); + 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); + auto t1 = spawn pfib(chan(p), n - 1); + auto t2 = spawn pfib(chan(p), n - 2); - c <| recv(p) + recv(p); + c <| recv(p) + recv(p); + } } - } - let port[int] p = port(); - auto t = spawn pfib(chan(p), n); - ret 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); +fn main(vec[str] argv) { + if(vec::len(argv) == 1u) { + assert (fib(8) == 21); + assert (fib(15) == 610); + log fib(8); + log fib(15); + } + else { + // Interactive mode! Wooo!!!! + + auto n = uint::parse_buf(str::bytes(argv.(1)), 10u) as int; + auto start = time::precise_time_ns(); + auto fibn = fib(n); + auto stop = time::precise_time_ns(); + + auto elapsed = (stop - start) as int; + auto us_task = elapsed / fibn / 1000; + + log_err #fmt("Determined that fib(%d) = %d in %d ns (%d us / task)", + n, fibn, elapsed, us_task); + } } -- cgit 1.4.1-3-g733a5