Skip to content

Commit f028bc4

Browse files
committed
unix support for life demo cpu timing
1 parent dda3f18 commit f028bc4

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

rayon-demo/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ docopt = "1"
1111
fixedbitset = "0.1.5"
1212
glium = "0.21"
1313
lazy_static = "1"
14+
libc = "0.2"
1415
odds = "0.3"
1516
rand = "0.5"
1617
regex = "1"

rayon-demo/src/life/cpu_time/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ mod win;
55
#[cfg(windows)]
66
pub use self::win::get_cpu_time;
77

8-
#[cfg(not(windows))]
8+
#[cfg(unix)]
9+
mod unix;
10+
#[cfg(unix)]
11+
pub use self::unix::get_cpu_time;
12+
13+
#[cfg(not(any(unix, windows)))]
914
pub fn get_cpu_time() -> Option<u64> {
1015
None
1116
}

rayon-demo/src/life/cpu_time/unix.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use libc::{getrusage, rusage, RUSAGE_SELF};
2+
use std::mem;
3+
4+
pub fn get_cpu_time() -> Option<u64> {
5+
unsafe {
6+
let mut usage: rusage = mem::uninitialized();
7+
getrusage(RUSAGE_SELF, &mut usage);
8+
let user = 1_000_000_000 * (usage.ru_utime.tv_sec as u64)
9+
+ 1_000 * (usage.ru_utime.tv_usec as u64);
10+
let system = 1_000_000_000 * (usage.ru_stime.tv_sec as u64)
11+
+ 1_000 * (usage.ru_stime.tv_usec as u64);
12+
Some(user + system)
13+
}
14+
}

rayon-demo/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ extern crate serde; // all
3333
extern crate cgmath; // nbody
3434
#[macro_use]
3535
extern crate glium; // nbody
36+
extern crate libc; // life
3637
extern crate rand; // nbody
3738
extern crate time; // nbody, sieve
3839
extern crate odds; // sieve

0 commit comments

Comments
 (0)