performance measurements

Each table row shows performance measurements for this Rust program with a particular command-line input value N.

 N  CPU secs Elapsed secs Memory KB Code B ≈ CPU Load
100.390.11?644  82% 91% 100% 91%
114.471.1837,740644  96% 98% 97% 99%
1258.4714.6739,788644  100% 100% 100% 100%

Read the ↓ make, command line, and program output logs to see how this program was run.

Read fannkuch-redux benchmark to see what this program should do.

 notes

rustc 0.12.0 (ba4081a5a 2014-10-07 13:44:41 -0700)

 fannkuch-redux Rust program source code

// The Computer Language Benchmarks Game
// http://benchmarksgame.alioth.debian.org/
//
// contributed by TeXitoi 

use std::cmp::max;

fn fact(n: uint) -> uint {
    range(1, n + 1).fold(1, |accu, i| accu * i)
}

fn fannkuch(n: uint, i: uint) -> (int, int) {
    let mut perm = Vec::from_fn(n, |e| ((n + e - i) % n + 1) as i32);
    let mut tperm = perm.clone();
    let mut count = Vec::from_elem(n, 0u);
    let mut perm_count = 0i;
    let mut checksum = 0;

    for countdown in range(1, fact(n - 1) + 1).rev() {
        for i in range(1, n) {
            let perm0 = *perm.get(0);
            for j in range(0, i) {
                *perm.get_mut(j) = *perm.get(j + 1);
            }
            *perm.get_mut(i) = perm0;

            let count_i = count.get_mut(i);
            if *count_i >= i {
                *count_i = 0;
            } else {
                *count_i += 1;
                break;
            }
        }

        tperm.clone_from(&perm);
        let mut flips_count = 0;
        loop {
            let k = *tperm.get(0);
            if k == 1 { break; }
            tperm.mut_slice_to(k as uint).reverse();
            flips_count += 1;
        }
        perm_count = max(perm_count, flips_count);
        checksum += if countdown & 1 == 1 {flips_count} else {-flips_count}
    }
    (checksum, perm_count)
}

fn main() {
    let n = std::os::args().as_slice()
                           .get(1)
                           .and_then(|arg| from_str(arg.as_slice()))
                           .unwrap_or(2u);

    let (tx, rx) = channel();
    for i in range(0, n) {
        let tx = tx.clone();
        spawn(proc() tx.send(fannkuch(n, i)));
    }
    drop(tx);

    let mut checksum = 0;
    let mut perm = 0;
    for (cur_cks, cur_perm) in rx.iter() {
        checksum += cur_cks;
        perm = max(perm, cur_perm);
    }
    println!("{}\nPfannkuchen({}) = {}", checksum, n, perm);
}

 make, command-line, and program output logs

Mon, 13 Oct 2014 01:29:32 GMT

MAKE:
/usr/local/src/rust/bin/rustc --opt-level=3 -C target-cpu=core2 -C lto fannkuchredux.rs -o fannkuchredux.rust_run
fannkuchredux.rs:21:31: 21:37 warning: use of deprecated item: prefer using indexing, e.g., vec[0], #[warn(deprecated)] on by default
fannkuchredux.rs:21             let perm0 = *perm.get(0);
                                                  ^~~~~~
fannkuchredux.rs:23:42: 23:52 warning: use of deprecated item: prefer using indexing, e.g., vec[0], #[warn(deprecated)] on by default
fannkuchredux.rs:23                 *perm.get_mut(j) = *perm.get(j + 1);
                                                             ^~~~~~~~~~
fannkuchredux.rs:39:28: 39:34 warning: use of deprecated item: prefer using indexing, e.g., vec[0], #[warn(deprecated)] on by default
fannkuchredux.rs:39             let k = *tperm.get(0);
                                               ^~~~~~
fannkuchredux.rs:41:19: 41:42 warning: use of deprecated item: use slice_to_mut, #[warn(deprecated)] on by default
fannkuchredux.rs:41             tperm.mut_slice_to(k as uint).reverse();
                                      ^~~~~~~~~~~~~~~~~~~~~~~
rm fannkuchredux.rs
13.70s to complete and log all make actions

COMMAND LINE:
./fannkuchredux.rust_run 12

PROGRAM OUTPUT:
3968050
Pfannkuchen(12) = 65

Revised BSD license

  Home   Conclusions   License   Play