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.430.12?644  92% 92% 77% 83%
115.171.3235,652644  98% 98% 96% 99%
1270.6217.7137,720644  100% 100% 100% 99%

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.11.0 (aa1163b92de7717eb7c5eba002b4012e0574a7fe 2014-06-27 12:50:16 -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

Tue, 08 Jul 2014 00:03:57 GMT

MAKE:
/usr/local/src/rust-0.11.0-i686-unknown-linux-gnu/bin/rustc --opt-level=3 fannkuchredux.rs -o fannkuchredux.rust_run
rm fannkuchredux.rs
3.92s 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